Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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#_.net_Asp.net Mvc_Memory_Memory Leaks - Fatal编程技术网

C# 清理参考库';运行时的内存

C# 清理参考库';运行时的内存,c#,.net,asp.net-mvc,memory,memory-leaks,C#,.net,Asp.net Mvc,Memory,Memory Leaks,有时您需要使用一个特定的第三方库,就像在我的例子中一样,一个加载PowerPoints并允许用户在代码中修改它们的库。我们发现这个特定的库有一些内存泄漏,但我们仍然希望使用它,因为这些泄漏只发生在一个非常罕见的特定场景中。尽管您试图处理对对象的所有引用,尽管这些对象超出了作用域,并且手动调用了垃圾收集,但仍然可以看到这些对象。当然,这个库会造成泄漏。我们的应用程序是单线程的 现在,我想知道是否有任何方法可以清理库在运行时使用的所有内存。是否有任何方法可以卸载和重新加载DLL,从而清除该库中的所有

有时您需要使用一个特定的第三方库,就像在我的例子中一样,一个加载PowerPoints并允许用户在代码中修改它们的库。我们发现这个特定的库有一些内存泄漏,但我们仍然希望使用它,因为这些泄漏只发生在一个非常罕见的特定场景中。尽管您试图处理对对象的所有引用,尽管这些对象超出了作用域,并且手动调用了垃圾收集,但仍然可以看到这些对象。当然,这个库会造成泄漏。我们的应用程序是单线程的


现在,我想知道是否有任何方法可以清理库在运行时使用的所有内存。是否有任何方法可以卸载和重新加载DLL,从而清除该库中的所有内存分配,或者我们可以在运行时执行任何操作来清除此第三方库使用的内存,然后在应用程序中重新加载库?

您可以研究在自定义
AppDomain中加载引用的库;应用程序域是进程内部的隔离单元,可以卸载。但是,它确实需要您在两个应用程序域(默认域和托管域)之间进行一些通信<代码>MarshalByRefObject
是最简单的技巧

或者:这项工作只需使用一个完整的单独过程。在windows上,创建进程的成本相对较高,但不会太高以至于您不应该这样做。完成后关闭该进程相当于将其从轨道上核爆。您可以随时在以后重新生成另一个进程


有一整套关于
AppDomain

的“如何”主题,您可以研究在自定义
AppDomain
中加载引用的库;应用程序域是进程内部的隔离单元,可以卸载。但是,它确实需要您在两个应用程序域(默认域和托管域)之间进行一些通信<代码>MarshalByRefObject是最简单的技巧

或者:这项工作只需使用一个完整的单独过程。在windows上,创建进程的成本相对较高,但不会太高以至于您不应该这样做。完成后关闭该进程相当于将其从轨道上核爆。您可以随时在以后重新生成另一个进程


有一整套关于
AppDomain

的“如何”主题,您可以研究在自定义
AppDomain
中加载引用的库;应用程序域是进程内部的隔离单元,可以卸载。但是,它确实需要您在两个应用程序域(默认域和托管域)之间进行一些通信<代码>MarshalByRefObject是最简单的技巧

或者:这项工作只需使用一个完整的单独过程。在windows上,创建进程的成本相对较高,但不会太高以至于您不应该这样做。完成后关闭该进程相当于将其从轨道上核爆。您可以随时在以后重新生成另一个进程


有一整套关于
AppDomain

的“如何”主题,您可以研究在自定义
AppDomain
中加载引用的库;应用程序域是进程内部的隔离单元,可以卸载。但是,它确实需要您在两个应用程序域(默认域和托管域)之间进行一些通信<代码>MarshalByRefObject是最简单的技巧

或者:这项工作只需使用一个完整的单独过程。在windows上,创建进程的成本相对较高,但不会太高以至于您不应该这样做。完成后关闭该进程相当于将其从轨道上核爆。您可以随时在以后重新生成另一个进程

关于
AppDomain

如何通过新的AppDomain(可以显式卸载)使用它?通过新的AppDomain(可以显式卸载)使用它?通过新的AppDomain(可以显式卸载)使用它?通过新的AppDomain(可以显式卸载)使用它?