我正在阅读一个项目,程序员编写此代码来检查程序内存
if ((Process.GetCurrentProcess().WorkingSet64 + Process.GetCurrentProcess().PagedMemorySize64) > (long)2048* (long)1024 * (long)1024)
{
Program.Log("memory is over 2G! ----- !closed!" );
Restart();
}
我想知道为什么程序员添加PagedMemorySize64和WorkingSet64来计算当前内存大小?
是WorkingSet64还不够?
是真的吗?
答案 0 :(得分:-1)
因为他相信应用程序使用的总内存是已经“分页”到磁盘(不使用物理内存)的内存和当前的“工作集”的组合,我假设他认为这是当前的应用程序使用的总物理内存。
所以:WorkingSet64(phys mem)+ PagedMemorySize64(mem paged to disk)=分配的总mem
这很快变得复杂,你会发现这个问题没有一个真正的答案:“我有多少记忆?”。它也没有帮助.Net这些属性的文档不是那么好,并且这些例子对于了解这些属性意义不大。
如果你想进入它,你可能必须阅读有关Windows内存管理的内容,包括页面文件,共享DLL,Windows内存页面和Windows堆,以及它是如何工作的。例如,应用程序可以在其虚拟内存地址空间中分配堆,但不能将该堆中的页面提交到映射到实际内存。有人可能会问,我想知道哪两个?