【问题标题】:Find out how much memory is being used by an object in C#?找出 C# 中的对象使用了多少内存?
【发布时间】:2010-09-08 19:36:30
【问题描述】:

有谁知道找出对象实例占用多少内存的方法?

例如,如果我有以下对象的实例:

TestClass tc = new TestClass();

有没有办法找出实例tc 占用了多少内存?

询问的原因是,尽管 C# 内置了内存管理,但我经常遇到不清除对象实例的问题(例如,跟踪某事的 List)。

有几个相当不错的内存分析器(例如 ANTS Profiler),但在多线程环境中,即使使用这些工具,也很难弄清楚什么属于哪里。

【问题讨论】:

标签: c# performance memory profiler


【解决方案1】:

如果您不尝试在代码本身中执行此操作,我假设这是基于您的 ANTS 参考,请尝试查看 CLRProfiler(当前为 v2.0)。它是免费的,如果您不介意相当简单的 UI,它可以提供有价值的信息。它将为您提供各种统计数据的深入概述。不久前,我将它用作查找内存韭菜的一种工具。

在此处下载:https://github.com/MicrosoftArchive/clrprofiler

如果您确实想在代码中执行此操作,CLR 具有您可以使用的分析 API。如果您在 CLRProfiler 中找到信息,因为它使用这些 API,您应该也可以在代码中完成。更多信息在这里: http://msdn.microsoft.com/de-de/magazine/cc300553(en-us).aspx

(它不像使用 WinDbg 那样神秘,但要准备好深入 CLR。​​)

【讨论】:

    【解决方案2】:

    Microsoft 免费提供的CLR Profiler 在这类事情上做得非常好。

    整个profiler的介绍可以下载here。不久前,Patterns & Practices 团队 put something 一起详细介绍了如何使用分析器。

    它在向您展示不同的线程和在这些线程中创建的对象方面做得相当合理。

    希望这能带来一些启发。快乐的分析!

    【讨论】:

      【解决方案3】:

      我对@9​​87654321@ 有很好的体验。它为您提供对象创建时间的堆栈跟踪,以及对象仍未被垃圾回收的所有图表。

      【讨论】:

        猜你喜欢
        • 2010-09-30
        • 2010-09-07
        • 1970-01-01
        • 2018-05-02
        • 2010-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-29
        相关资源
        最近更新 更多