为什么Process.PrivateMemorySize64/1024与Windows任务管理器中的内存(私有工作集)不匹配?

8

为什么Process.PrivateMemorySize64 / 1024与Windows任务管理器的内存(私有工作集)不匹配?

似乎存在大约30%的差异。而且该值不像任务管理器那样频繁更新。

调用_process.Refresh()无济于事。


查看此处(http://www.itwriting.com/dotnetmem.php)可能有助于您找出.NET上的内存问题。在任务管理器中打印的内存并不是您的应用程序实际使用的内存。 - MakePeaceGreatAgain
它们是截然不同的数字,虚拟内存与物理内存。 - Hans Passant
3个回答

5
您正在查看不同的内容。
来自进程类的PrivateMemorySize64属性相当于私有字节性能计数器。它表示为关联进程分配的无法与其他进程共享的私有内存总量。私有字节不仅是物理内存,还包括分页文件等。
另一方面,私有工作集跟踪上述私有字节的子集,仅表示进程正在使用且无法与其他进程共享的物理内存。

3
PrivateMemorySize64 表示您的所有私有内存,而不仅仅是私有工作集,即当前未分页到磁盘的私有内存量。
如果您想知道进程的总大小,则应使用 VirtualMemorySize64 属性。它占用进程分配的所有内存,无论该内存是否被分页或缓存在 RAM 中。例如,这对于了解您的 32 位进程是否接近 2GB 的虚拟大小(进程地址空间)非常有用,这通常是 32 位进程的限制(除非在 32 位 Windows 上使用 /3GB 选项或应用程序在 64 位版本的 Windows 并且支持大地址 aware)。

0

我想这就是你要找的东西

var ram = new PerformanceCounter("Process", "Working Set - Private", processName, true);
var ramUsage = Math.Round(ram.NextValue() / 1024 / 1024, 2)
Console.WriteLine($"{ramUsage}");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接