内存使用量测量问题

时间:2011-01-19 16:39:36

标签: c#

我有一些C#函数,我想以字节为单位测量它们的内存使用量。我使用GC.GetTotalMemory如下:

long val1 = GC.GetTotalMemory(false);

// my code

long val2 = GC.GetTotalMemory(false);

long result = val2  - val1 ;

我试图传递true和false作为GC.GetTotalMemory的参数,但我不知道为什么我得到负结果值,当我从val2中减去val1 ....另一个问题是GC.GetTotalMemory给出不同的值在每次执行中,我认为这不准确

有人知道为什么我会得到负面结果值吗?是因为论证(真或假),虽然我试过它们并且得到了负面结果值

有人知道为什么我在C#函数的每次执行中得到不同的值吗?

如果有人有更好的方法来测量Windows中C#函数的内存使用量,请告诉我并多谢

2 个答案:

答案 0 :(得分:3)

您可能收到否定结果,因为可能在两点之间进行垃圾收集,导致消耗的总内存减少。实际上,当您将GC.GetTotalMemory函数you're actually allowing it to wait for a garbage collection to take place传递给true时,会增加返回负值的可能性。

更好(也更准确)的方法是假设您可以在点上暂停进程,可以查看性能监视器中的各种(.NET和进程/内存)计数器,以查看之前和之后的内容。 / p>

答案 1 :(得分:0)

我不认为GC.GetTotalMemory有助于确定某种方法分配的内存量,GC可能在此期间做了任何事情并且结果不可靠。

我不能使用分析器来识别程序的内存分配,无论是VS 2010分析器还是RedGate的ANTS分析器,我认为可以免费使用2周。

请注意,sys内部的实用程序也可用于检查程序,工作集或类似内容的已分配内存。