Memory leaks 为什么PrivateMorysize64返回的值比GC.GetTotalMemory的值大?

Memory leaks 为什么PrivateMorysize64返回的值比GC.GetTotalMemory的值大?,memory-leaks,garbage-collection,ram,Memory Leaks,Garbage Collection,Ram,首先,一点背景。我正在尝试编写一个自动化测试,通过定期检查RAM使用情况来查找产品中的内存泄漏。为了找到解决这个问题的最佳方法,我决定使用PrivateMemorySize64和GC.GetTotalMemory,如下所示: long memory; long temp; Process[] targetProcess = Process.GetProcessesByName(Path.GetFileNameWithoutExtension("(ProcessName).exe"));

首先,一点背景。我正在尝试编写一个自动化测试,通过定期检查RAM使用情况来查找产品中的内存泄漏。为了找到解决这个问题的最佳方法,我决定使用PrivateMemorySize64和GC.GetTotalMemory,如下所示:

long memory;
long temp;
Process[] targetProcess = Process.GetProcessesByName(Path.GetFileNameWithoutExtension("(ProcessName).exe"));                
memory = GC.GetTotalMemory(false);
temp = targetProcess[0].PrivateMemorySize64;
int b = 4;
我原以为PrivateMemorySize64只返回进程使用的内存,因此始终是命名进程使用的内存的更小、更准确的表示。然而,我发现它一直都比原来大至少一个数量级。这让我怀疑它的准确性。有人知道为什么会这样,或者有人推荐一种更好的方法来确定程序的内存使用情况吗


感谢

GC.GetTotalMemory检索认为要分配的内存量。它只知道托管组件分配的内存,除非调用GC.AddMemoryPressure告诉它分配的其他内存

此属性“PrivateMemorySize64”可用于监视具有32位处理器或64位处理器的计算机上的内存使用情况。属性值相当于进程的专用字节性能计数器。私有字节指的是进程可执行文件要求的内存量,因此它还包括本机代码分配的内存

因此解释了PrivateMorysize64比GC.GetTotalMemory()大的原因

请参阅以下文章: