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

本文关键字:内存 专用 工作集 不匹配 任务管理器 Windows PrivateMemorySize64 Process 1024 为什么 | 更新日期: 2023-09-27 18:27:42

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

似乎有很大的差异(约30%)。此外,该值不会像任务管理器那样频繁更新。

调用_process.Refresh()没有帮助。

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

您看到的是不同的东西。

Process类的PrivateMemorySize64属性相当于Private Bytes性能计数器。它表示为关联进程分配的无法与其他进程共享的专用内存总量。专用字节不仅是物理内存,还包括分页文件等。

在另一端,专用工作集跟踪上面的专用字节的子集,它只表示进程正在使用的物理内存,不能与其他进程共享。

PrivateMemorySize64表示所有的私有内存,而不仅仅是私有工作集,它是当前未分页到磁盘的私有内存量。

如果你想知道进程的总大小,你应该使用VirtualMemorySize64属性。不管内存是分页的还是RAM上的,它都会计算进程分配的所有内存。例如,这有助于了解32位进程是否接近2GB的虚拟大小(进程地址空间),这通常是32位进程的限制(除非在32位Windows上使用/3GB选项,或者应用程序在64位版本的Windows上运行并且具有大的地址意识)。

我想这就是您想要的

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