避免内存泄漏的非托管DLL的c#客户端中的内存泄漏

时间:2014-05-21 08:46:28

标签: c# dll memory-leaks unmanaged

不幸的是,我必须在C#客户端中使用带有内存泄漏的本机C ++ DLL。

我想知道是否有一种很好的方法可以避免在我的c#app中出现内存泄漏?

实际上,我尝试加载/卸载我的DLL很多次以避免内存占用,但我不确定它是否可以避免内存泄漏:

// Dynamically load DLL file
NativeMethods.LoadLibrary(...)

// Do stuffs with the DLL
... (call compute method)

// Dynamically unload DLL file
NativeMethods.FreeLibrary(...)

// Dynamically load DLL file
NativeMethods.LoadLibrary(...)

// Do stuffs with the DLL
... (call compute method)

// Dynamically unload DLL file
NativeMethods.FreeLibrary(...)

etc...

由于

2 个答案:

答案 0 :(得分:1)

根据我的理论,这没有任何改变。 在C#/托管中,与将DLL加载到本机程序中相比,没有什么不同。 DLL将分配堆内存,因为该资源属于该进程,即使卸载了DLL,它也会持久存在。

如果你有一个纯粹管理的DLL,事情就会改变。然后,您可以将其加载到应用程序域中,并将DLL与App-Domain ...一起部署...

所以解决方案? 困难的方式类似于具有32位DLL问题的64位进程。 创建一个单独的进程,加载DLL并进行远程调用。这很麻烦,但如果它只是一个电话,它可能是值得的。

其他: 不是我知道但修复DLL的代码。

答案 1 :(得分:0)

如果您在c#中使用任何第三方dll,我们必须在不使用时手动删除

使用以下命令手动删除对象引用。 GC.SuppressFinalize()