【问题标题】:Programmer's understanding of Memory in the Vista Windows Task Manager程序员对 Vista Windows 任务管理器中内存的理解
【发布时间】:2010-09-17 22:26:01
【问题描述】:
我对 XP 中的 Windows 任务管理器有一些了解,但我想在 Vista 中更好地理解它。 “工作集(内存)”和“内存(私有工作集)”有什么区别。什么是Paged Pool,什么是NP Pool(Non-Paged?)。如何使用这些来确定内存使用情况?顺便说一句,当你最小化一个程序时,它经常返回它正在使用的 90% 的内存。有没有办法做到这一点而不最小化它?
【问题讨论】:
标签:
windows
memory
windows-vista
【解决方案1】:
This MSDN blog entry 可能会为问题的第一部分提供信息。摘录:
工作集是仅驻留在物理内存中的虚拟页面的子集;这将是该进程的部分页面。
正如文章中所讨论的,关于私有与非私有的部分与进程使用的内存有关,这些内存可以由其他进程共享。如果你不能共享内存(也许内存被一个 DLL 的映像使用,必须在内存中重新定位),它就会变成私有的。堆内存也总是私有的。
您在最小化程序时看到内存急剧下降的原因是 Windows 会在其主窗口最小化时自动修剪进程的工作集。请参阅this Microsoft KB article 了解更多信息,包括有关如何自己执行此操作的说明。
分页池和非分页池内存是指进程使用的内核内存。分页池中的内存可以被分页(当内存压力增加时从物理内存中移除)。非分页池中的内存将始终保留在物理内存中,因此通常最好保持较小。不过,除非您正在编写设备驱动程序,否则作为用户模式应用程序开发人员,您通常不需要担心这两项。
【解决方案2】:
Vista 的 SuperFetch 将空闲内存视为浪费内存。更好的是像缓存一样使用它。这就是为什么您经常会在任务管理器中看到可用内存不足的原因。