2010-01-07 36 views
0

.NET开发人员在托管应用程序中寻找(并避免)非托管泄漏的最佳方式是什么?用于查找/避免托管代码中的非托管泄漏的技术

似乎有很多优秀的资源用于跟踪托管泄漏,但我在追踪托管应用程序中的非托管泄漏方面没有发现太多。

This question是相关的,但从纯粹非托管的角度提出问题,许多答案都假设您可以访问非托管代码,并且没有提到任何.NET特定的陷阱或技术。

这里有一些(很基本的)事情我已经尝试:

  • DebugDiag。它看起来很有希望,它可能适用于你,但它恰好会使我的特定应用程序崩溃。
  • Rational PurifyPlus。可悲的是,也崩溃了我的应用程序。
  • AQTime(在@Reed和@Caelum的推荐下)。这个程序看起来很棒,但就像@Caelum提到的问题的海报一样,AQTime也会崩溃我的应用程序。
  • 暂时删除创建我知道使用非托管内存的对象的代码。
  • 确保应用程序的配置实现IDisposable

所有对象我要指出,我是能够成功地剖面中的另一管理应用程序使用上述分析器(这是泄漏非托管内存)。如果你有非托管泄漏,请给他们一个尝试。

回答

0

我认为你已经击中了大部分选项,我发现的最好方法就是从一开始就考虑如何使用和管理非托管资源。

正如您所说的,确保良好的使用IDisposable和思考终结者以及它们如何影响您的应用程序是我发现避免泄漏的最佳方式:)。

DebugDiag是Microsoft性能团队在寻找应用程序问题时将使用的内容,我相信为其编译内存转储文件甚至可以集成到Win 7和Visual Studio 2010中的任务管理器中。

使用DebugDiag时,请务必查看SOS扩展。也许更好的问题是问为什么DebugDiag和PurifyPlus崩溃为您的特定应用程序?由于这看起来会导致问题,无论你尝试什么......

+0

您是对的:找到一种使用这些分析器的方法是一个非常好的主意。即使我的完整应用程序在通过配置文件运行时崩溃,我已经成功分析了一个小的漏洞应用程序。 – 2010-01-09 00:00:04

0

我个人使用的代码分析器支持托管和非托管(以及混合模式)代码:AQTime。它将处理来自托管代码和非托管代码的跟踪内存,因此它使混合项目中的跟踪内存更简单