我有一个使用一些代码的脚本生成的DLL在运行时和调用它们根据需要和遇到了一些问题,我继续和代码之前的应用程序!
是否有可能从内存中卸载它们不需要的时候? 如果没有 - 这将是它们加载到单独的AppDomain,并使用一些IPC等调用调用对性能的影响 - 顺便说一句,这必须是具有高性能/实时
可替代地,关于如何加载产生的组件的多个实例(具有不同的版本#'当然S)? 如果你释放所有引用不被使用,它可能由GC /卸载框架我会承担?
另外问答 - 会有任何“冲突”(不知道这是正确的字?)在这种情况下?
组件只能与整个的AppDomain卸载。 根据多少你需要加载的动态组件,它可能是确定以加载它们在默认的AppDomain,让他们留在内存中,直到应用程序被关闭。 但是,如果你认为你有太多和内存消耗将成为一个问题,你将需要加载它们在一个单独的AppDomain中,使用AppDomain.DoCallBack马歇尔呼吁翻过的AppDomain的界限,并定期卸载的AppDomain。 例如, T4在Visual Studio负载主机编译的程序中为至多25个代码生成会话的单独应用程序域和然后卸载应用程序域回收存储器。
附加编组的性能的影响,需要发生相比于编译生成的飞行的组件的冲击的单独的AppDomain将是微不足道的。 它只会成为一个问题,如果跨域调用的数量是很大的。 你可能会需要测试AppDomain.DoCallBack的性能,以确定是否性能会为您的方案可以接受。
文章来源: Dynamically loading and unloading a a dll generated using CSharpCodeProvider