Kum*_*mar 4 c# code-generation
我有一个应用程序使用一些代码脚本在运行时生成DLL并根据需要调用它们并在我继续编码之前遇到一些问题!
是否可以在不需要时从内存中卸载它们?如果不是 - 将它们加载到单独的appdomains并使用某些ipc等调用调用会对性能产生什么影响 - 顺便说一下,这需要具有高性能/实时性
或者,如何加载生成的程序集的多个实例(当然使用不同版本的#)?我假设如果你释放所有未使用的引用,它可能会被gc/framework卸载?
还有一个Q - 在这种情况下是否会出现任何"碰撞"(不确定这是否是正确的词?)?
只能使用整个AppDomain卸载程序集.根据您需要加载的动态程序集的数量,可以将它们加载到默认的AppDomain中,并让它们保留在内存中,直到关闭应用程序.但是,如果您认为自己的内存太多并且内存消耗将成为问题,则需要在单独的AppDomain中加载它们,使用AppDomain.DoCallBack对AppDomain边界的调用进行编组并定期卸载AppDomain.例如,Visual Studio中的T4主机将编译的程序集加载到单独的AppDomain中,最多可存储25个代码生成会话,然后卸载AppDomain以回收内存.
与编译和生成程序集的影响相比,使用单独的AppDomain进行额外编组的性能影响将是微不足道的.如果跨域调用的数量很大,它将成为一个问题.您可能需要测试AppDomain.DoCallBack的性能,以确定性能是否可以接受您的方案.