DotNetNuke是一个大型的ASP.NET CMS,大多数都是预编译的,其中包含的大部分模块也是如此。
当我们部署DotNetNuke站点更改时,我们会在第一页点击时发生两次重新编译。
有没有办法分配更多的CPU容量来编译IIS 7中的asp.net站点?
问&安培; A
您应该使用预编译的ASP.NET。为什么不是你?
你怎么知道它重新编译而不是填充缓存或什么?
答案 0 :(得分:8)
设置<compilation optimizeCompilations="true" />
指定如果更改顶级文件,动态编译是否将重新编译整个站点。顶级文件包括Global.asax文件以及Bin和App_Code文件夹中的所有文件。如果为True,则仅重新编译已更改的文件。
来源:compilation Element (ASP.NET Settings Schema)
有关优缺点的更多信息,请参阅优化动态编译下的Understanding ASP.NET Dynamic Compilation。导致错误的主要原因是删除或更改现有方法签名,导致已编译的页面在重新编译之前抛出MissingMethodException。
您还可以考虑减少批量编译的批量大小,或者完全禁用它。我相信这会减少单个页面的编译时间,但会生成更多的程序集并消耗更多的内存。
答案 1 :(得分:2)
我过去曾与DotNetNuke有过完全相同的经历。我们的问题是我们安装了大约125-150个模块,所有模块都有自己的组件。它们的绝对数量将导致第一次请求延迟接近一分钟或更长时间。在部署期间更糟糕,因为我们会有目的地重新安装我们自己的自定义模块。后来,我们调整了部署脚本以避免安装已安装的模块,这有帮助。但是,第一个请求仍然是一个熊,因为它运行的是VB.NET和C#编译器(我们的模块是C#,而DNN当时是VB.NET)。
虽然我们使用optimizeCompiliations
属性来帮助您,但您还需要考虑确保没有实时病毒扫描程序监视代码所在的目录和Temporary ASP.NET Files文件夹。这会使编译速度变慢。
接下来,您可以考虑使用ILMerge将一些程序集合并到一个程序集中,但我知道我们避免使用此选项,因为它会导致我们比预期解决更多的部署问题。
最后,这是一个场景,其中一些额外的硬件并不是一个坏主意。最有帮助的是更快的CPU,只需将编译时间缩短到合理的时间。
DotNetNuke.com在他们的Wiki中有a few个性能调整提示。对性能提供最大帮助的是截断EventLog和SiteLog表,因为如果你不注意它们它们会变得非常大。在网站索引中还有一两个表,在某些版本中,它们已经失去控制。老实说,这不是你的问题。您遇到了典型的ASP.NET冷启动问题。
您可能还需要查看一些common ASP.NET performance issues。这个讲述了冷启动和热启动性能增强。
答案 2 :(得分:1)
预编译而不是动态编译选项吗?
答案 3 :(得分:1)
我很确定这是不可能的,因为编译是在单个线程中执行的,它不能跨越处理器。运行站点跨越处理器/核心,但第一次命中编译不会。
您可以看到的是将您的解决方案分解为项目。然后,您网站的一小部分需要完全重新编译。
答案 4 :(得分:1)
2核CPU系统上50%的CPU利用率表明ASP.NET编译器是单线程的。您会看到四核系统的CPU利用率为25% 据我所知,没有任何神奇的方法可以将其转换为多线程编译器。
然而,您可以做的一件事是在部署之前使用ASP.NET compilation tool预编译整个站点。在dev / staging框上执行此操作并部署到prod,并且您的prod部署不应该受到这些延迟的影响。
必须咬我的舌头,但我不得不问;你真的部署到经常这是一个问题吗?