【问题标题】:Is there a way to identify what component actually allocate memory in a .NET app?有没有办法确定 .NET 应用程序中实际分配内存的组件?
【发布时间】:2019-12-03 13:33:37
【问题描述】:

我正在开发一个应用程序,我想在各个方面进行优化,并且在这个目标上,我希望它不会占用太多内存(今天它是 145 Mb,对我(51 岁)来说已经很多了我用的是 1(一)Kb 的 ZX81...)

那么有没有办法确定 .NET 应用程序中实际分配内存的组件是什么?我注意到具有撤消能力的 RichTextBox 是一个很好的消费者,但是有没有办法以编程方式或具有视觉工作室(2017 Entreprise)功能,通过“组件”甚至变量获取分配的内存列表? (内存窗口调试似乎没有帮助)。

非常感谢。

【问题讨论】:

  • 听起来像是在寻找内存泄漏。使用内存分析器。
  • 谢谢,但是“内存分析器”在哪里?
  • @SidiBrah 例如dotMemory
  • 在 Visual Studio 中,在“调试”下有一个“显示诊断工具”选项,您可以获得已分配项目的大树,但更有用的是您可以拍摄“快照”。例如运行应用程序,拍摄快照,短时间做某事,拍摄另一个快照,它可以比较两者。虽然不一定是最容易使用的东西,所以上面提到的分析器可能会有所帮助(不是个人使用的)
  • diagnostic tools debugger windowprofiling memory usage。我个人也使用 dotMemory(虽然很少)。

标签: c# .net memory


【解决方案1】:

在 Visual Studio 2017 中,转到“分析”菜单并选择“Performance Profiler...”:

然后选择“.NET Object allocation Tracking”,点击“开始”:

它将运行应用程序,让它运行一段时间,然后停止它并分析结果。

【讨论】:

    【解决方案2】:

    你可以使用DotMemory,它是内存泄漏、内存使用调查的好工具

    我也推荐这篇微软文章:

    .NET Memory Allocation Profiling with Visual Studio 2012

    还有这篇博文:

    Find, Fix, and Avoid Memory Leaks in C# .NET: 8 Best Practices

    【讨论】:

    猜你喜欢
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多