避免在具有内存泄漏的非托管DLL的c#客户端中发生内存泄漏

本文关键字:内存 泄漏 DLL 客户端 | 更新日期: 2023-09-27 18:04:27

不幸的是,我不得不在c#客户端中使用具有内存泄漏的本地c++ DLL

我想知道是否有一种好方法来避免在我的c#应用程序中有这种内存泄漏?

实际上,我尝试加载/卸载多次我的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...

谢谢

避免在具有内存泄漏的非托管DLL的c#客户端中发生内存泄漏

根据我的理论,这改变不了什么。在c#/managed中,与将DLL加载到本机程序中没有太大的不同。DLL将分配堆内存,并且由于该资源属于进程,因此它将持续存在,即使DLL被卸载。

如果你有一个纯托管的DLL,事情就会改变。然后,您可以将其加载到应用程序域中,并将DLL与应用程序域一起处置…

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

:

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

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