我尝试使用Process.privateBytes和Process.workingSet来测量代码和进程的内存使用情况但是如果我多次运行应用程序,每次我有不同的值?
每次获得相同值的准确方法是什么?
答案 0 :(得分:1)
Process.privateBytes是一个近似,除非有问题的代码和进程中只有一个Thread.Sleep(),它所产生的所有线程都有,所以这些值必然会发生变化(依赖)消耗的内存+ GC)
答案 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等最好的不是免费的。