如何判断我的托管代码是否因本机库调用而泄漏内存?
-
05-07-2019 - |
题
我有一个托管dll,可以调用本机库。此本机库通常返回IntPtrs。这些可以传递给本机库中的其他方法来执行操作,或者告诉库释放与IntPtr关联的实例。但是只有一些实例需要以这种方式释放,其他实例则由库管理。问题是文档并不总是清楚哪些实例必须被释放,哪些实例不能被释放。
我想知道的是,如果有一种方法可以判断我的代码是否保留了对必须释放的任何指针的引用,那么是否会导致内存泄漏?
解决方案
最简单的方法可能是使用内存分析器。一个快速的谷歌出现了一个链接到 MemProfiler 。我已经使用过一次(作为试用版),我能够找到我没有正确处理DirectoryEntries的地方。我确定还有其他人,包括RedGate的一个。
其他提示
您可以考虑使用 SafeHandles 包装从Native代码返回的句柄。它为IntPtr提供了一些额外的价值。
不隶属于 StackOverflow