【问题标题】:diffrence between WorkingSet64 and PagedMemorySize64 [duplicate]WorkingSet64 和 PagedMemorySize64 之间的差异 [重复]
【发布时间】: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 文档,正如所写的那样,对于回答他的问题或映射所讨论的函数的实际情况并没有帮助。

标签: c# .net memory-management


【解决方案1】:

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

所以:WorkingSet64(物理内存)+ PagedMemorySize64(内存分页到磁盘)= 分配的内存总量

这会很快变得复杂,您会发现对于“我占用了多少内存?”这个问题没有一个真正的答案。 .Net 文档中关于这些属性的不太好也无济于事,而且这些示例对于了解这些属性的含义也无济于事。

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

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 2018-07-24
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2012-12-02
    • 1970-01-01
    相关资源
    最近更新 更多