有时你需要使用特定的第三方库,就像我的情况一样,它可以加载PowerPoints并允许用户在代码中修改它们。我们发现这个特定的库有一些内存泄漏,但我们仍然希望使用它,因为这些泄漏只发生在很少发生的一个特定场景中。尽管尝试处理对它们的所有引用,并且尽管这些对象超出范围,并且尽管已手动调用垃圾收集,但您可以看到周围的对象。当然,这个库会造成泄漏。我们的应用程序是单线程的。
现在,话虽如此,我想知道是否有办法清理库在运行时使用的所有内存。是否有任何方法可以卸载和重新加载可能导致该库中所有内存分配被清除的DLL,或者我们可以在运行时完成的任何操作来清理此第三方库使用的内存,然后可能重新加载库我们的申请?
答案 0 :(得分:3)
您可以调查在自定义AppDomain
内加载引用的库; app-domain是一个隔离内部进程的单元 - 可以卸载。但是,它确实要求您在两个应用程序域(默认域和托管域)之间进行一些通信; MarshalByRefObject
是最简单的技巧。
或者:只需使用完整的单独流程进行此项工作。在Windows上,创建一个进程相对昂贵,但不是那么昂贵,你永远不应该这样做。完成后关闭该过程相当于从轨道中进行核对。您可以随时重新生成另一个进程。
有一整套"如何"有关AppDomain
linked from MSDN here