WorkingSet64和PagedMemorySize64之间的差异

时间:2013-01-02 08:08:24

标签: c# .net memory-management

  

可能重复:
  What is private bytes, virtual bytes, working set?

我正在阅读一个项目,程序员编写此代码来检查程序内存

if ((Process.GetCurrentProcess().WorkingSet64 + Process.GetCurrentProcess().PagedMemorySize64) > (long)2048* (long)1024 * (long)1024)
                {

                    Program.Log("memory is over 2G! ----- !closed!" );

                    Restart();
                }

我想知道为什么程序员添加PagedMemorySize64和WorkingSet64来计算当前内存大小?

是WorkingSet64还不够?

是真的吗?

1 个答案:

答案 0 :(得分:-1)

因为他相信应用程序使用的总内存是已经“分页”到磁盘(不使用物理内存)的内存和当前的“工作集”的组合,我假设他认为这是当前的应用程序使用的总物理内存。

所以:WorkingSet64(phys mem)+ PagedMemorySize64(mem paged to disk)=分配的总mem

这很快变得复杂,你会发现这个问题没有一个真正的答案:“我有多少记忆?”。它也没有帮助.Net这些属性的文档不是那么好,并且这些例子对于了解这些属性意义不大。

如果你想进入它,你可能必须阅读有关Windows内存管理的内容,包括页面文件,共享DLL,Windows内存页面和Windows堆,以及它是如何工作的。例如,应用程序可以在其虚拟内存地址空间中分配堆,但不能将该堆中的页面提交到映射到实际内存。有人可能会问,我想知道哪两个?