如何衡量代码或进程的累计内存使用情况?

时间:2015-08-03 08:55:56

标签: c# .net performance memory

我尝试使用Process.privateBytes和Process.workingSet来测量代码和进程的内存使用情况但是如果我多次运行应用程序,每次我有不同的值?

每次获得相同值的准确方法是什么?

3 个答案:

答案 0 :(得分:1)

Process.privateBytes是一个近似,除非有问题的代码和进程中只有一个Thread.Sleep(),它所产生的所有线程都有,所以这些值必然会发生变化(依赖)消耗的内存+ GC)

另请参阅 What is private bytes, virtual bytes, working set?

答案 1 :(得分:1)

如果你需要从代码中测量内存使用量(正如你在评论中提到的那样)使用JetBrains dotMemory Unit框架(它是免费的),它就是为这些任务设计的。

var snapshot1 = dotMemoryApi.GetSnapshot();
foo.Bar(); // run your code
var allocatedSize = dotMemoryApi.GetDifference(snapshot1).GetNewObjects().SizeInBytes;

它可以轻松地与单元测试一起使用,但也可以用于任何应用。当前的EAP版本包含用于此目的的独立启动器。 问我是否需要有关该框架的帮助。

以前的版本有在线文档 https://www.jetbrains.com/dotmemory/unit/help/Introduction.html

答案 2 :(得分:0)

为了准确测量内存消耗,您可以使用专业的内存分析器。但是,JetBrains dotMemory和Redgate ANTS等最好的不是免费的。