清理引用的库';s运行时的内存

本文关键字:运行时 内存 引用 | 更新日期: 2023-09-27 18:25:46

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

话虽如此,我想知道是否有任何方法可以清理库在运行时使用的所有内存。有没有任何方法可以卸载和重新加载DLL,这可能会导致该库中的所有内存分配被清除,或者我们可以在运行时做任何事情来清理这个第三方库使用的内存,然后可能在我们的应用程序中重新加载库?

清理引用的库';s运行时的内存

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

或者:只需使用一个完整的单独过程来完成这项工作。在windows上,创建一个进程的成本相对较低,但也不至于太高,以至于你永远不应该这样做。完成后关闭进程相当于从轨道上发射核弹。您可以稍后重新生成另一个进程。

有一整套关于AppDomain的"如何"主题从MSDN链接到这里