不幸的是,我必须在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...
由于
答案 0 :(得分:1)
根据我的理论,这没有任何改变。 在C#/托管中,与将DLL加载到本机程序中相比,没有什么不同。 DLL将分配堆内存,因为该资源属于该进程,即使卸载了DLL,它也会持久存在。
如果你有一个纯粹管理的DLL,事情就会改变。然后,您可以将其加载到应用程序域中,并将DLL与App-Domain ...一起部署...
所以解决方案? 困难的方式类似于具有32位DLL问题的64位进程。 创建一个单独的进程,加载DLL并进行远程调用。这很麻烦,但如果它只是一个电话,它可能是值得的。
其他: 不是我知道但修复DLL的代码。
答案 1 :(得分:0)
如果您在c#中使用任何第三方dll,我们必须在不使用时手动删除
使用以下命令手动删除对象引用。 GC.SuppressFinalize()