帮助理解Windows内存 – “工作集”

前端之家收集整理的这篇文章主要介绍了帮助理解Windows内存 – “工作集”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在追踪我的应用程序中的一些内存泄漏.这是一个真正的痛苦,但我终于收紧了一切.但是,有一点Windows内存管理让我感到困惑.以下是应用程序内存使用情况的打印输出
Time        PrivateMemorySize64        WorkingSet64
20:00:36    47480,50144
20:01:06    47480,50144
20:01:36    47480,50144
20:02:06    47480,149540
20:02:36    47480,149540
20:03:06    47480,149540

工作装置在30秒的时间内从49 MB跳到146.这种情况在一夜之间发生,因为应用程序基本上什

工作集(任务管理器向我展示)似乎能够受到其他应用程序(如调试器)的影响(正如我在查找内存泄漏时所了解的那样).在阅读了有关工作集的文档后,我仍然没有很好的理解.

任何帮助表示赞赏.

更新:感谢响应者的一些链接以及一些额外的搜索,我更好地了解了一个单独的流程如何导致我的流程的工作集增长.很高兴知道工作集中的峰值并不一定表明你的应用程序正在泄漏…还有理由不依赖任务管理器进行内存评估:)

有用的网址:

A few words on memory usage or: working set vs. private working set

CyberNotes: Windows Memory Usage Explained

简单地说,工作集是您的进程当前拥有的内存页面的集合,而不是换出(即在RAM中).然而,这有点不准确.现实要复杂得多.

Windows维护每个进程的最小工作集大小和最大工作集大小.最小工作集很简单,它将授予Windows每个进程(只要它可以通过物理限制).

最大工作集更加可疑.如果您的程序使用的内存超过其配额中的内存,Windows将删除一些页面.然而,虽然它们不再在您的工作集中,但这些页面不一定“消失”.

相反,这些页面将从您的工作集中删除并移动到可用页面池中.因此,如果某些其他程序需要更多内存并且没有剩余已清除的页面,则您的页面将被清除,并分配给不同的进程.当您访问它们时,如果您仍然高于最大工作集大小,则需要再次从交换文件提取它们,可能还要清除其他页面.

但是,如果没有人要求同时获得更多内存(或者无论如何都可以通过未使用的页面满足所有要求),那么访问其中一个页面只会使其“神奇地重新出现”并取而代之的是另一页.

因此,您的进程可以在RAM中拥有比其工作集中更多的页面,但它并不“正式”拥有它们.

猜你在找的Windows相关文章