WorkingSet64 和 PagedMemorySize64 之间的差异 [重复]
Posted
技术标签:
【中文标题】WorkingSet64 和 PagedMemorySize64 之间的差异 [重复]【英文标题】:diffrence between WorkingSet64 and PagedMemorySize64 [duplicate] 【发布时间】:2012-12-16 14:58:20 【问题描述】:可能重复: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 还不够吗?
是真的吗?
【问题讨论】:
他这么写是因为他一无所知。关于内存如何工作以及如何修复他的代码中的错误。使用内存分析器修复错误,摆脱它。 99% 的问题都有大量的无知。最后的评论听起来像是一个敏感问题,而不是一个有用的评论。似乎是一个公平的问题。只是语义触发了 SO 生活方式的窥视。对于这两个值的 Microsoft 文档,正如所写的那样,对于回答他的问题或映射所讨论的函数的实际情况并没有帮助。 【参考方案1】:因为他相信应用程序使用的总内存是已“分页”到磁盘的内存(不使用物理内存)和当前“工作集”的组合,我假设他相信是当前的应用使用的总物理内存。
所以:WorkingSet64(物理内存)+ PagedMemorySize64(内存分页到磁盘)= 分配的内存总量
这会很快变得复杂,您会发现对于“我占用了多少内存?”这个问题没有一个真正的答案。 .Net 文档中关于这些属性的不太好也无济于事,而且这些示例对于了解这些属性的含义也无济于事。
如果您想深入了解它,您可能需要阅读有关 Windows 内存管理的内容,包括页面文件、共享 DLL、Windows 内存页面和 Windows 堆,以及它们是如何工作的。例如,应用程序可以在其虚拟内存地址空间中分配一个堆,但不能将该堆中的页面提交到映射到真实内存。有人可能会问,我想知道这两个中的哪一个?
【讨论】:
以上是关于WorkingSet64 和 PagedMemorySize64 之间的差异 [重复]的主要内容,如果未能解决你的问题,请参考以下文章