我有一些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#函数的内存使用量,请告诉我并多谢
答案 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内部的实用程序也可用于检查程序,工作集或类似内容的已分配内存。