如何判断我的托管代码是否因本机库调用而泄漏内存?

时间:2008-10-28 19:20:57

标签: .net memory-management memory-leaks native

我有一个托管dll,可以调用本机库。此本机库通常返回IntPtrs。这些可以传递给本机库中的其他方法来执行操作,或者告诉库释放与IntPtr关联的实例。但是只有一些实例需要以这种方式释放,其他实例则由库管理。问题是文档并不总是清楚哪些实例必须被释放,哪些实例不能被释放。

我想知道的是,如果有一种方法可以判断我的代码是否保留了对必须释放的任何指针的引用,那么是否会导致内存泄漏?

3 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用内存分析器。一个快速谷歌出现了MemProfiler的链接。我已经使用过一次(作为试用版),我能够找到我没有正确处理DirectoryEntries的地方。我确定还有其他人,包括RedGate的one

答案 1 :(得分:1)

我使用的是WinDbg(可用here)。它的命令行驱动,但提供了很多好的报告,包括堆栈信息,对象数量和采取的大小(这可以帮助指向未被处理的项目)。

还有Debug Diagnostic工具,它具有Memory和Handle Leaks的特定报告。它的here

答案 2 :(得分:1)

您可能希望考虑使用SafeHandles来包装从Native代码返回的句柄。它为IntPtr提供了一些额外的价值。