【问题标题】:How to know the total memory allocated by a process since its creation如何知道一个进程自创建以来分配的总内存
【发布时间】:2017-01-07 01:00:36
【问题描述】:

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

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

我知道 GC 一直在释放内存,但我想计算的是分配了多少内存,有点像 System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime 为消耗的 CPU 所做的(至少我认为是这样)。

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

提前致谢。

【问题讨论】:

  • 我对已使用或可用内存的快照不感兴趣,而是对自进程诞生以来分配的累积内存感兴趣。无论如何,谢谢。

标签: c# .net memory memory-management clr


【解决方案1】:

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

它的基础也是

using system.Diagnostics;

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

在您想将ObjectCounterInstance 放在引号中的引用中。如果有三个---,那么它不需要任何东西,而忽略它。

【讨论】:

  • 看起来您的链接指向监控 CPU,而不是内存。另外,哪个性能计数器记录了自进程诞生以来分配的累积内存?
  • 实际上有数百个计数器。创造性思考。系统通过使用计数器perfmon 来跟上这些数字,并在 perfmon 中转到内存部分。在我的教程中,我展示了获取正在运行的程序使用的内存,但是您要查找的是内存部分。我的教程向您展示了如何到达那里.. 我会快速查找并告诉您
  • 我做了三个性能计数器只是给出了你可以做什么的想法。正如我所说,有数百个柜台。但是,如果您想在 Chrome 上使用多少内存,那么您将使用 AvailableMBytes 并创建一个标签来为您提供统计信息,如果您想要缓存,那么您使用 Cache Bytes 究竟是什么试图测量系统或应用程序使用的总内存?
  • 我的问题不清楚。我不是要测量在某个时间点分配的内存,而是从进程诞生以来分配的总内存,包括已经运行的众多 GC 释放的内存。我刚刚更新了问题以更清楚。
  • Err... 我不确定我是否熟悉术语memory process life
猜你喜欢
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 2018-06-19
  • 2015-01-13
相关资源
最近更新 更多