我试图将Razor视图引擎用作数据库支持的通用模板引擎 http://razorengine.codeplex.com/问题是每次模板编译都会创建并加载一个新的动态程序集。由于无法从当前appdomain卸载程序集,并且无法为模板系统使用单独的appdomain(使用匿名类型),因此这些程序集将不断累积,直到appdomain被销毁。模板本身会定期更改,因此会导致更多的重新编译。
问题是这些动态程序集(可能有数千个)是否会损害appdomain性能?或者有更好的方法吗?
答案 0 :(得分:1)
通常,在AppDomain中加载许多小程序集不应该太担心。任何人都可以做出的唯一一般声明是在相关场景中衡量应用程序的实际性能,然后查看它是否重要。
ASP.NET有一些自动应用程序生命周期管理,可以在某些事件后回收AppDomain。例如,如果应用程序中有太多的重新编译,那么ASP.NET将自动重新启动应用程序。这意味着将清除所有先前加载的程序集,并从头开始。
有关详细信息,请参阅MSDN:http://msdn.microsoft.com/en-us/library/s10awwz0.aspx
<强> numRecompilesBeforeAppRestart 强>
可选的Int32属性。
指定在应用程序重新启动之前可能发生的资源的动态重新编译次数。此属性在全局和应用程序级别受支持,但在目录级别不受支持。
注意强>
每次程序集失效时,ASP.NET都会增加NumRecompilesBeforeAppRestart属性,并且无法删除。
默认值为15。