发现.NET内存泄漏?

时间:2011-04-04 18:27:53

标签: c# .net memory-leaks

我创建了一个带有2个Dialogs的示例程序。两个对话框都有一个图片框,一个调用pictureBox1.Image.Dispose();在受保护的覆盖void Dispose(bool disposing)方法中,另一方法没有。

当你运行程序并使用任务管理器查看内存使用情况时,显然非常显示不调用pictureBox1.Image.Dispose()的对话框;泄密记忆非常糟糕。

是否有人建议使用能够以明确方式显示问题的工具?

有没有办法计算特定c#源文件的内存分配/释放?至少这是我能用非托管C ++做的事情。

3 个答案:

答案 0 :(得分:10)

在VS2010中尝试Analyze> Launch Performance Wizard菜单选项并选择内存选项。

在VS2017中,它是Analyze> Performance Profiler...

答案 1 :(得分:4)

查看蚂蚁分析器:http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/

有一个14天的免费试用版和许多有用的教程可以帮助您入门。

答案 2 :(得分:2)

作为VS嵌入式性能分析​​器的替代,我发现Jetbrains的 DotMemory 实用且容易。

  • 您可以很快从泄漏的托管代码中查看哪些对象类型。
  • 您有一个仪表板,可以查看常见问题(字符串重复等)
  • 您还可以查看非托管内存。界面相当 完整,复杂(您可以真正地挖掘和理解很多东西,并迅速找到罪魁祸首的对象和代码)。 a view on a snapshot analysis [0] https://www.jetbrains.com/dotmemory/