0

可能重复:
什么是私有字节、虚拟字节、工作集?

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

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

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

                    Restart();
                }

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

WorkingSet64 还不够吗?

是真的吗?

4

1 回答 1

-1

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

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

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

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

于 2013-01-02T08:22:50.520 回答