ASP.NET预编译但启动时间仍然很慢?

时间:2013-03-03 15:09:09

标签: asp.net precompile

我正在试图弄清楚我做错了什么或不理解。我有一个Web应用程序和一些类库的解决方案。

我编辑了Web项目的Web应用程序发布设置。它已经“在发布之前预先编译了这个应用程序”,我选择了“只运行此应用程序所需的文件”。

我创建了一个发布配置文件,只将其转储到一个文件夹中。从该文件夹我上传(使用FTP)DLL到我设置的暂存站点,这是我在部署应用程序之前进行最终测试的地方。在上传DLL并转到临时站点之后,仍然存在应用程序启动延迟,这似乎同样缓慢。是不应该通过预编译消失?

编辑:关闭允许站点可更新可以解决问题。允许它可更新导致我的所有ASPX页面和用户控件都在第一页面视图上编译,这导致即使编译后面的代码仍然存在延迟。我已禁用批量编译并在web.config中打开optimizeCompilations,现在速度很快:

<compilation batch="false" optimizeCompilations="true" />

4 个答案:

答案 0 :(得分:3)

也许您已在配置中保留debug=True设置?

除其他外,这将禁用批量编译和缓存(但缓存不应影响您的启动时间)。

有关详细信息,请参阅herehere

答案 1 :(得分:0)

您使用的是哪个Framework版本?如果您使用.Net 3.5(特别是),则应考虑使用:

<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>

大约是冷启动时间的一半。但是,一个已知的问题是,当IIS对应用程序进行冷启动时,会出现初始延迟。这不仅限于部署应用程序,也适用于应用程序池的循环使用。

到目前为止,我能想到的最佳选择是编写一个预定脚本来定期自动启动(预热)一个站点(比如说每1分钟?)。

答案 2 :(得分:0)

我设法把我搞清楚了。以前我的冷启动是在我的本地开发机器上花了18分钟(上演时间不到30秒)。

我终于注意到程序在冷启动期间运行了高CPU。 该程序是.. MsMpEng.exe - 这是Microsoft Security Essentials,包括Microsoft Defender。 我卸载它,我的网站现在加载不到30秒。

显然它正在扫描冷启动期间被复制的每个.dll,并阻止每个额外的.dll被复制,直到它完成扫描前一个.dll。

冷启动现在不到30秒。

答案 3 :(得分:0)

在我们的案例中,在我们添加SignalR之后,预编译的应用程序(之前在眨眼之间更新)开始表现缓慢。

现在,我使用this open source tool描述了这个过程(免责声明,我是该项目的贡献者,最初由Stackoverflow团队编写),我在最长的调用堆栈中看到了这一点:

//...skipped
System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start
Microsoft.Owin.Host.SystemWeb.OwinCallContext.AcceptCallback
//...skipped

谢谢,奥巴马。

Wtf,微软?

向Owin依赖问好。