程序员对Vista Windows任务pipe理器中的内存的理解

我对XP中的Windows任务pipe理器有一定的了解,但我想在Vista中更好地理解它。 “工作集(内存)”和“内存(私人工作集)”之间的区别是什么? 什么是分页池,什么是NP池(非分页?)。 如何使用这些来确定内存使用情况? 另外,当你最小化一个程序时,它经常返回90%的内存。 有没有办法做到这一点,而不是最小化?

这个MSDN博客条目可能在问题的第一部分提供信息。 一个简短的摘录:

工作集是仅驻留在物理内存中的虚拟页面的子集; 这将是来自该过程的部分页面。

正如文章中所讨论的那样,关于私有和非私有的部分与进程所使用的内存可以被其他进程共享。 如果你不能共享内存(也许内存是由一个DLL的图像使用的,必须重新定位在内存中),它变成了私有的。 堆内存也一直是私人的。

当最小化程序时,看到内存急剧下降的原因在于,只要主窗口最小化,Windows就会自动修剪进程的工作集。 有关详情,请参阅此Microsoft知识库文章 ,其中包括有关如何自行完成此操作的说明

页面缓冲池和非页面缓冲池内存是指进程使用的内核内存。 来自分页池的内存可以被分页(当内存压力增加时从内存中移除)。 来自非页面缓冲池的内存将永远保留在物理内存中,所以通常最好保持小的状态。 除非你正在编写设备驱动程序,否则作为一个用户模式的应用程序开发者,你通常不需要担心这两个项目。

Vista的SuperFetch认为可用内存浪费了内存。 更好的是使用它像一个缓存。 这就是为什么你会经常在任务管理器中看到没有足够空间的内存。