为什么PrivateMemorySize64返回的值大于GC.GetTotalMemory?

时间:2014-03-07 19:44:10

标签: memory-leaks garbage-collection ram

首先,一点背景。我正在尝试编写一个自动化测试,通过定期检查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只返回进程使用的内存,因此可以更精确地表示命名进程使用的内容。但是,我发现它始终更大至少一个数量级。这让我想知道它的准确性。有谁知道为什么会这样,或者建议更好的方法来确定程序的内存使用情况?

由于

1 个答案:

答案 0 :(得分:2)

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

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

因此解释了为什么PrivateMemorySize64比GC.GetTotalMemory()大。

请参阅这些文章:

What is private bytes, virtual bytes, working set?

C# - GC.GetTotalMemory()