当我的大型ASP.NET站点更新时,IIS必须重新编译它.有没有办法显着减少编译时间?

Bri*_*ter 5 .net asp.net iis iis-7 dotnetnuke

DotNetNuke是一个大型的ASP.NET CMS,它主要是预编译的,其中包含的大多数模块也是如此.

当我们部署DotNetNuke站点更改时,我们会在第一页命中时进行两次重新编译.

  1. 在bin文件夹中替换DLL时发生的应用程序级重新编译
  2. 每次首次访问单个模块时,都会在该特定模块上进行一些重新编译.

有没有办法分配更多的CPU容量来编译IIS 7中的asp.net站点?

  • 我想使用多个核心,或者至少做一些事情来减少重新编译时间.

Q&A

您应该使用预编译的ASP.NET.你为什么不呢?

  • 我们正在使用预编译的ASP.NET.仅仅因为ASP.NET应用程序被编译成DLL并不意味着ASP.NET运行时不会进行额外的重新编译以便将其提供给访问者.

你怎么知道它重新编译而不是填充缓存或什么?

  • 在上述页面命中期间,查看服务器上的任务管理器显示编译器可执行文件的50%CPU使用率.为什么50%?2核服务器.

sis*_*sve 8

组 <compilation optimizeCompilations="true" />

指定如果更改顶级文件,动态编译是否将重新编译整个站点.顶级文件包括Global.asax文件以及Bin和App_Code文件夹中的所有文件.如果为True,则仅重新编译已更改的文件.

来源:编译元素(ASP.NET设置架构)

有关优缺点的更多信息,请参阅" 优化动态编译"下的" 了解ASP.NET动态编译".导致错误的主要原因是删除或更改现有方法签名,导致已编译的页面在重新编译之前抛出MissingMethodException.

您还可以考虑减少批量编译的批量大小,或者完全禁用它.我相信这会减少单个页面的编译时间,但会产生更多的程序集并消耗更多的内存.

  • 该标志对生产环境来说是一个风险。我仅推荐用于调试。为什么,在某些情况下,某个函数的更改无法被aspx页面识别,并且如果您没有更新也有该函数引用的aspx页面,则会导致错误。 (2认同)