如何知道进程自创建以来分配的总内存

问题描述 投票:0回答:2

我们正在尝试设置一个回归测试环境,在该环境中安装我们的应用程序,重播一些流量,然后与同一应用程序的“产品级”版本进行比较。重播后,我们将比较两个版本的关键指标,包括业务和技术。

其中一个指标是进程自创建以来分配了多少内存,以确保当前版本分配的内存不会明显多于“产品级”版本。但我在 PerformanceCounters 或 System.Diagnostics 中找不到任何可以为我们提供此信息的指标。

我知道GC一直在释放内存,但我想计算的是已经分配了多少内存,有点像

System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime
对消耗的CPU的作用(至少我认为是这样)。

编辑:换句话说,我想要测量的是 gen0-1-2 中的总内存加上我的进程中运行的众多 GC 释放的所有内存。

提前致谢。

c# .net memory memory-management clr
2个回答
0
投票

对于 .Net Framework

AppDomain.CurrentDomain.MonitoringTotalAllocatedMemorySize
给出了这个。

对于 .Net Core 还有

System.GC.GetTotalAllocatedBytes()

我不确定有什么区别,在我的实验中

System.GC.GetTotalAllocatedBytes(true)
给出了非常准确的计数,即使看到一个额外的对象分配。
System.GC.GetTotalAllocatedBytes(false)
AppDomain.CurrentDomain.MonitoringTotalAllocatedMemorySize
似乎给出相同的值,并且仅在多次分配后更新。


-2
投票

您可以通过运行对话框添加性能计数器,只需输入 perfmon 即可。然后只需选择计数器,然后通过诊断引用它。这是我在 https://www.youtube.com/watch?v=niKP91D50Ko

上完成的教程

其基础知识是

using system.Diagnostics;

PerformanceCounter perfCPUCounter  = new PerformanceCounter(" "," "," ");

在引文中,您希望将

Object
Counter
Instance
放入引文中。如果有三个
---
,那么就不需要任何东西,可以省略。

© www.soinside.com 2019 - 2024. All rights reserved.