我正在试图弄清楚我做错了什么或不理解。我有一个Web应用程序和一些类库的解决方案。
我编辑了Web项目的Web应用程序发布设置。它已经“在发布之前预先编译了这个应用程序”,我选择了“只运行此应用程序所需的文件”。
我创建了一个发布配置文件,只将其转储到一个文件夹中。从该文件夹我上传(使用FTP)DLL到我设置的暂存站点,这是我在部署应用程序之前进行最终测试的地方。在上传DLL并转到临时站点之后,仍然存在应用程序启动延迟,这似乎同样缓慢。是不应该通过预编译消失?
编辑:关闭允许站点可更新可以解决问题。允许它可更新导致我的所有ASPX页面和用户控件都在第一页面视图上编译,这导致即使编译后面的代码仍然存在延迟。我已禁用批量编译并在web.config中打开optimizeCompilations,现在速度很快:
<compilation batch="false" optimizeCompilations="true" />
答案 0 :(得分:3)
答案 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依赖问好。