为什么是Process.PagedMemorySize64>机器上没有分页内存时为0?

时间:2010-02-16 20:21:45

标签: .net memory-management memory-leaks large-object-heap

我在页面文件大小设置为零的计算机上运行.net代码。我的应用程序记录System.Diagnostics.Process.PagedMemorySize64并显示一个值> 0.

这怎么可能?

PagedMemorySize64的文档读取:

  

此属性返回的值表示进程使用的虚拟内存分页文件中的当前内存大小。

我错过了什么?

背景
我这样做是为了确定我是否有内存泄漏。我正在使用未显示任何增长的配置文件,但System.Diagnostics.Process的内存值继续增加。

我认为我可能正在处理大对象堆碎片。我的程序正在显示大图像的WPF幻灯片,并在图像之间显示淡入淡出动画。

欢迎任何解释。

感谢。

1 个答案:

答案 0 :(得分:1)

我认为这种描述具有误导性。实际上,进程中的所有虚拟内存页面都是可分页的。但它们不一定最终会出现在页面文件中。从DLL加载的任何代码都不必存储在那里。内存管理器只需在需要空间时丢弃页面,当需要重新交换时,它会从DLL重新加载。

在.NET进程中,至少是为CLR,JIT编译器和任何Ngen-ed程序集的代码映射的页面。所有.NET框架程序集都是Ngen-ed。页面文件将用于其余部分,任何JIT编译的代码和数据。

这个数字对诊断泄漏没有帮助。它不断变化,你不会做任何让内存管理器直接决定换出页面的事情。其他可能比最小化程序的主窗口,触发内存管理器积极修剪工作集(=驻留在RAM中的页数)。获得一个好的记忆探测器来获得成功。