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

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

有帮助吗?

解决方案

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

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top