在C#/.NET应用程序中以任何方式获取分配给内存中每种类型的内存细分

本文关键字:内存 分配 获取 细分 类型 种类 何方 应用程序 NET 任何方 | 更新日期: 2023-09-27 18:21:17

我有一个应用程序,它消耗了大量实时数据,因为它做得太多了,所以在VS 2010下速度很慢,这导致它以各种方式失败。

所以我想知道,除了这个探查器之外,是否还有其他方法可以找出内存中每种类型分配了多少字节内存,并定期将其转储出去?

这是一个相当大的应用程序,所以添加我自己的计数器是不可行的。。。

在C#/.NET应用程序中以任何方式获取分配给内存中每种类型的内存细分

您需要使用内存探查器。

周围有很多,有些是免费的,有些是商业的。

  • MemProfiler
  • ANTS内存探查器
  • dotTrace
  • clr探查器

另请参阅哪些是好的.NET探查器?

没有简单的通用方法来表示GetBytesUsedForInstance(object),但这取决于您需要数据的用途(除非所有类型都是值类型,在这种情况下应该相对简单)。

我们的部分应用程序有一个内存缓存。我们最关心的是使用的相对内存量,即总缓存大小是昨天的两倍。为此,我们将对象图序列化为流,并获取流长度(然后丢弃流)。这不是对"一个类型占用了多少内存"本身的准确测量,但对这些相对比较很有用。

除此之外,我认为你一直在使用探查器。我可以强烈推荐SciTech内存档案器——我经常使用它。它可以很好地集成到Visual Studio中,速度很快(不管怎样,最新版本也是如此),并且提供了非常有用的细节。

为了获得一般信息,我建议您大量使用Process Explorer。一旦你发现你需要更深入地了解这些东西(例如,堆上有什么类型的对象),用于分析的最佳工具I是JetBrains内存和性能分析器。这个是只付的。

如果您只需要性能分析器,则有真正好的免费选项Equatec性能分析器

祝你好运。