【问题标题】:What is the best way to find a process's memory allocations in terms of C# objects根据 C# 对象查找进程内存分配的最佳方法是什么
【发布时间】:2010-06-17 07:25:18
【问题描述】:

我编写了各种基于 C# 控制台的应用程序,其中一些运行时间很长,一些没有运行,随着时间的推移,它们会占用大量内存。通过任务管理器查看windows性能监视器时,同样的问题不断出现在我的脑海中;如何按类型细分导致此足迹的数字对象;其中哪些是可访问的,哪些不是可以收集的。在许多情况下,我都执行了代码检查,以确保我不会不必要地持有超过所需时间的对象并使用 using 构造处理对象。当我释放大量对象(例如,保存在刚刚被清除的集合中)时,我最近还研究了使用 CG.Collect 方法。但是,我不太确定这会产生多大的不同,所以我把那段代码扔掉了。 我猜想 sysinternals 套件中有一些工具可以帮助解决这些内存类型问题,但我不确定哪些以及如何使用它们。另一种选择是购买第三方分析工具,例如 JetBrains dotTrace;但我需要先确定我已经探索了免费选项,然后再与我的经理联系。

【问题讨论】:

    标签: c# garbage-collection memory-management profiling


    【解决方案1】:

    有一个 CLR Profiler 可以让您查看各种对象图(我从未使用过):

    http://www.microsoft.com/downloads/details.aspx?FamilyID=86ce6052-d7f4-4aeb-9b7a-94635beebdda&displaylang=en

    当然,ANTS Profiler(免费试用版)是经常推荐的分析器。您不需要手动进行垃圾收集,GC 是一个非常智能构建的解决方案,它可能比您所做的任何手动调用都更优化。更好的方法是尽量减少您保留在内存中的对象数量 - 如果内存优先,则尽快摆脱内存重的对象。

    【讨论】:

    • 感谢亚当,我刚刚在我的台式机和 64 位应用程序服务器上尝试了 CLR Profiler。由于不同的原因,它在两种情况下都崩溃了;两次分析相同的应用程序。我对 CLR profiler 的问题进行了搜索,发现它似乎存在很多稳定性问题;所以我不会再浪费时间使用它了。我将看看看起来非常强大的 ANTS 以及 JetBrains dotTrace。感谢您的投入
    猜你喜欢
    • 1970-01-01
    • 2017-01-03
    • 2011-03-20
    • 2018-07-24
    • 2018-10-06
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多