C# 动态程序集过多

C# 动态程序集过多,c#,razor,C#,Razor,我正在尝试将Razor视图引擎用作由数据库支持的通用模板引擎。 问题在于,对于每个模板编译,都会创建并加载一个新的动态程序集。由于无法从当前appdomain卸载程序集,也无法为模板系统使用单独的appdomain(使用匿名类型),这些程序集将不断累积,直到appdomain被销毁。模板本身将定期更改,因此将导致更多的重新编译 问题是这些动态程序集(可能有数千个)是否会影响appdomain的性能?或者,还有更好的方法吗?通常,在AppDomain中加载许多小程序集不应该太担心。关于这一点,任何

我正在尝试将Razor视图引擎用作由数据库支持的通用模板引擎。
问题在于,对于每个模板编译,都会创建并加载一个新的动态程序集。由于无法从当前appdomain卸载程序集,也无法为模板系统使用单独的appdomain(使用匿名类型),这些程序集将不断累积,直到appdomain被销毁。模板本身将定期更改,因此将导致更多的重新编译


问题是这些动态程序集(可能有数千个)是否会影响appdomain的性能?或者,还有更好的方法吗?

通常,在AppDomain中加载许多小程序集不应该太担心。关于这一点,任何人唯一能做的一般性陈述就是在相关场景中衡量应用程序的实际性能,然后看看它是否重要

ASP.NET具有一些自动应用程序生命周期管理功能,可在某些事件后回收AppDomain。例如,如果应用程序中有太多的重新编译,则ASP.NET将自动重新启动应用程序。这意味着所有以前加载的程序集都将被清除,您将从头开始

有关更多信息,请参阅MSDN:

numRecompilesBeforeAppRestart

可选的Int32属性

指定在应用程序重新启动之前可能发生的资源动态重新编译次数。此属性在全局和应用程序级别受支持,但在目录级别不受支持

注意

每当程序集无效且无法删除时,ASP.NET都会增加NumRecompilesBeforeAppRestart属性

默认值为15


很高兴知道至少有一些安全设施。到目前为止,它似乎工作正常。