3

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

我编辑了 Web 项目的 Web 应用发布设置。它已选中“在发布前预编译此应用程序”,并且我选择了“仅运行此应用程序所需的文件”。

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

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

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

4 回答 4

3

也许你debug=True在配置中留下了设置?

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

有关更多详细信息,请参见此处此处

于 2013-03-03T15:23:09.897 回答
0

你在哪个框架版本上?如果您使用的是 .Net 3.5(特别是),您应该考虑使用:

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

它将大约是冷启动时间的一半。但一个已知问题是,当 IIS 对应用程序进行冷启动时,会出现初始延迟。这不仅限于您部署应用程序,还包括您的应用程序池回收时。

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

于 2013-03-03T16:17:21.067 回答
0

我设法弄清楚我的。以前,我在本地开发机器上的冷启动需要 18 分钟(暂存时不到 30 秒)。

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

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

冷启动现在不到 30 秒。

于 2015-01-29T01:23:19.090 回答
0

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

现在,我使用这个开源工具分析了这个过程(免责声明,我是该项目的贡献者,最初由 Stackoverflow 团队编写),我在最长的调用堆栈中看到了这个:

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

谢谢,奥巴马。

靠,微软?

向 Owin 依赖问好。

于 2017-06-20T16:06:19.110 回答