如何在内存分析期间跟踪 .NET 应用程序中内存访问的频率和数量?

Posted

技术标签:

【中文标题】如何在内存分析期间跟踪 .NET 应用程序中内存访问的频率和数量?【英文标题】:How can I track the frequency and volume of memory access in a .NET application during memory profiling? 【发布时间】:2016-01-11 21:38:35 【问题描述】:

我正在尝试减少 .NET 应用程序的内存占用。随着时间的推移,由于开发人员出于各种目的在内存中创建了新的、重复的数据表示,因此该应用程序对内存的使用量不断增加。

我想确定访问这些数据的重复表示的频率,以便我可以决定是否将它们设为短暂的并在访问时创建以减少峰值工作集大小。

所以我的问题是 - 跟踪对象分配的大小和数量以及访问对象的频率和数量的最佳方法是什么?我知道所有基本的内存分析器都会处理分配信息——将其与内存访问相关联是我感兴趣的。

需要明确的是,我并不是在寻找关于这个工具是否比那个工具更好的固执己见的辩论。相反,我正在寻找一个答案,它告诉我如何最好地解决在内存分析期间考虑内存访问频率和数量的问题。

【问题讨论】:

【参考方案1】:

我认为这与内存分析无关。 AFAIK,现有的内存分析器都没有跟踪对数据的访问。我想说这里有两种选择:

为计算访问事件的数据类创建一些“包装器” 使用 performance 分析器(例如 dotTrace,使用 Tracing 模式)分析您的应用程序。后者很重要,因为只有在跟踪模式下,您才能获得调用函数的确切次数。在快照中,查看针对数据类的getter 和setter 的调用次数。根据数据的性质,可以以完全相同的方式组织计算“访问量”。例如,如果您使用某个集合,您可以计算对枚举器的 get_Current 或 MoveNext 方法的调用次数。相似的。

【讨论】:

以上是关于如何在内存分析期间跟踪 .NET 应用程序中内存访问的频率和数量?的主要内容,如果未能解决你的问题,请参考以下文章

.NET 如何测量请求中分配的字节数?

通过 Python 函数跟踪*最大*内存使用情况

Java类的内存性能[关闭]

.NET 分配分析

如何跟踪android应用程序消耗的峰值内存

如何在负载测试期间测量 CPU 和内存