我们正在尝试设置一个回归测试环境,在该环境中安装我们的应用程序,重播一些流量,然后与同一应用程序的“产品级”版本进行比较。重播后,我们将比较两个版本的关键指标,包括业务和技术。
其中一个指标是进程自创建以来分配了多少内存,以确保当前版本分配的内存不会明显多于“产品级”版本。但我在 PerformanceCounters 或 System.Diagnostics 中找不到任何可以为我们提供此信息的指标。
我知道GC一直在释放内存,但我想计算的是已经分配了多少内存,有点像
System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime
对消耗的CPU的作用(至少我认为是这样)。
编辑:换句话说,我想要测量的是 gen0-1-2 中的总内存加上我的进程中运行的众多 GC 释放的所有内存。
提前致谢。
AppDomain.CurrentDomain.MonitoringTotalAllocatedMemorySize
给出了这个。
System.GC.GetTotalAllocatedBytes()
。
我不确定有什么区别,在我的实验中
System.GC.GetTotalAllocatedBytes(true)
给出了非常准确的计数,即使看到一个额外的对象分配。 System.GC.GetTotalAllocatedBytes(false)
和 AppDomain.CurrentDomain.MonitoringTotalAllocatedMemorySize
似乎给出相同的值,并且仅在多次分配后更新。
您可以通过运行对话框添加性能计数器,只需输入 perfmon 即可。然后只需选择计数器,然后通过诊断引用它。这是我在 https://www.youtube.com/watch?v=niKP91D50Ko
上完成的教程其基础知识是
using system.Diagnostics;
PerformanceCounter perfCPUCounter = new PerformanceCounter(" "," "," ");
在引文中,您希望将
Object
、Counter
和 Instance
放入引文中。如果有三个---
,那么就不需要任何东西,可以省略。