发现 .NET 内存泄漏?
Posted
技术标签:
【中文标题】发现 .NET 内存泄漏?【英文标题】:Finding a .NET Memory Leak? 【发布时间】:2011-04-04 18:27:52 【问题描述】:我创建了一个带有 2 个对话框的示例程序。两个 Dialog 都有一个图片框,一个调用 pictureBox1.Image.Dispose();在受保护的覆盖 void Dispose(bool disposing) 方法中,而另一个没有。
当你运行程序并使用任务管理器查看内存使用情况时,不调用pictureBox1.Image.Dispose();的对话框变得非常明显。内存泄漏非常严重。
有没有人建议一种工具可以以如此清晰的方式显示问题?
有没有办法计算特定 c# 源文件的内存分配/释放?至少这是我能够用非托管 C++ 做的事情。
【问题讨论】:
您可以尝试任何 .net 内存分析器软件,例如 RedGate 或 Jetbrains。 您是否尝试过 Visual Studio 2010 中内置的分析器? 有很多用于分析内存的好工具。这是之前的一篇文章:***.com/questions/399847/net-memory-profiling-tools @PaulKearney-pk 这个帖子已经过时了,工具在过去的 10 年里进化了 【参考方案1】:在 VS2010 中尝试 Analyze
> Launch Performance Wizard
菜单选项并选择内存选项。
在 VS2017 中是 Analyze
> Performance Profiler...
【讨论】:
我已经尝试了 Visual Studio 2010 内置的分析器,不幸的是没有发现它特别有用。 您是否打开了“同时收集 .NET 对象生命周期数据”选项?【参考方案2】:查看 Ants Profiler:http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/
有 14 天的免费试用期和许多有用的教程来帮助您入门。
【讨论】:
【参考方案3】:作为 VS 的嵌入式性能分析器的替代品,我发现 Jetbrains 的 DotMemory 实用且简单。
您可以从正在泄漏的托管代码中快速查看哪些对象类型。 您有一个仪表板,可以查看常见问题(字符串重复等) 您还可以查看非托管内存。界面比较 完整、复杂(你真的可以挖掘和理解很多东西,并快速找到罪魁祸首对象和代码)。 [0]https://www.jetbrains.com/dotmemory/【讨论】:
以上是关于发现 .NET 内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章