我正在尝试使用Process.privateBytes和Process.workingSet来测量代码和进程的内存使用情况但是如果我运行应用程序几次,每次我有不同的值?
每次都有相同值的准确方法是什么?
Process.privateBytes是一个 Approximation ,除非有问题的代码和进程中只有一个Thread.Sleep(),它产生的所有线程,值必然会发生变化(取决于内存消耗GC)
Also refer What is private bytes, virtual bytes, working set?
如果您需要从代码中测量内存使用量(正如您在评论中提到的那样),请使用JetBrains dotMemory Unit框架(它完全针对此类任务设计了's free), it') .
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
为了准确测量内存消耗,您可以使用专业的 memory profiler . 然而,最好的,如JetBrains dotMemory和Redgate ANTS不是免费的 .
3 回答
Process.privateBytes是一个 Approximation ,除非有问题的代码和进程中只有一个Thread.Sleep(),它产生的所有线程,值必然会发生变化(取决于内存消耗GC)
Also refer What is private bytes, virtual bytes, working set?
如果您需要从代码中测量内存使用量(正如您在评论中提到的那样),请使用JetBrains dotMemory Unit框架(它完全针对此类任务设计了's free), it') .
它可以轻松地与单元测试一起使用,也可以用于任何应用 . 当前的EAP版本包含用于此目的的独立启动器 . 问我是否需要该框架的帮助 .
有以前版本的在线文档https://www.jetbrains.com/dotmemory/unit/help/Introduction.html
为了准确测量内存消耗,您可以使用专业的 memory profiler . 然而,最好的,如JetBrains dotMemory和Redgate ANTS不是免费的 .