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

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

什么是准确的方法每次都有相同的值?


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

另请参阅什么是专用字节,虚拟字节,工作集?


如果您需要从代码中测量内存使用情况(如您在评论中提到的那样),请使用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


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

链接地址: http://www.djcxy.com/p/80167.html

上一篇: How to measure the accruate memory usage for a code or process?

下一篇: Measuring an Android process memory usage