Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 清除非托管代码中的内存泄漏_C#_Memory Leaks_C++ Cli - Fatal编程技术网

C# 清除非托管代码中的内存泄漏

C# 清除非托管代码中的内存泄漏,c#,memory-leaks,c++-cli,C#,Memory Leaks,C++ Cli,我一直在想第3版中沙盒内存泄漏的最佳方法 当从.Net framework使用参与方库时 我有一个用C++/cli编写的第三方库,它会泄漏大量内存 有没有人找到了一种优雅的清洁方法 使用.Net的非托管内存泄漏 祝您好运,您可以选择运行内存检查程序来查找泄漏。这是一个相当直接的过程。我使用Intel Inspector(Intel parallel studio的一部分),但其他人会这样做 为了沙箱分配,您可以使用malloc替换,例如google\u malloc,并将其修改为具有free\u

我一直在想第3版中沙盒内存泄漏的最佳方法 当从.Net framework使用参与方库时

我有一个用C++/cli编写的第三方库,它会泄漏大量内存

有没有人找到了一种优雅的清洁方法 使用.Net的非托管内存泄漏


祝您好运,

您可以选择运行内存检查程序来查找泄漏。这是一个相当直接的过程。我使用Intel Inspector(Intel parallel studio的一部分),但其他人会这样做

为了沙箱分配,您可以使用
malloc
替换,例如google\u malloc,并将其修改为具有
free\u all\u memory
功能(如果它还没有)


这不是很优雅,但是如果你的非托管代码的形状非常糟糕,那是一个选项。

不可能,除非你当然可以修改和修复C++代码,但是这可能不是一个选项。我过去也遇到过同样的问题,解决方法是在进程中托管泄漏的代码(注意:应用程序域是不够的),并定期关闭该进程。使用一些IPC技术与该流程实例通信。您可以选择创建一个包含两个进程的池,以便即使在需要关闭进程时也能表现出反应性,这样您就可以轻松地切换到已经运行的另一个实例

最好的方法是向库的供应商提供bug报告,并让他们修复它。或者您只是使用了错误的API?也许您忘记在API中调用“release”或“close”函数了?即使是从非托管代码中,您如何清理它?如果内存泄漏且没有指向内存的指针,则无法释放/删除它。是否修复库?说真的,你不应该依赖一个坏掉的图书馆。即使你可以“清理”内存,很可能是库调用了未定义的行为。C++ DLL代码是由我编写的,但它有点大,这就是为什么我不知道你怎么知道漏内存是图书馆的职责?听起来您已经太习惯于管理内存了:)您必须研究API,以确定哪些内存是您的责任,哪些是库的责任。