在更新后使用我们的MVC Web应用程序时,首次加载主页需要几分钟时间。第一次加载后,加载速度非常快。可能MSIL代码被编译为Native Machine代码并被缓存。 (如我错了请纠正我)。每个页面都会出现这种情况。
每次将新版本复制到服务器时都会非常慢。 为了解决这个问题,我试图用ngen进行pre-jit编译,这样我们就可以为用户节省大量时间。 但是当对它的项目bin文件夹中的每个dll执行“ngen install mydll.dll”时,它会给我带来一些错误。这是命令
cd "C:\Windows\Microsoft.NET\Framework64\v4.0.30319"
for %%i in (C:\inetpub\wwwroot\myproject\bin\*.dll) do ngen install "%%i"
第一个错误是:
Failed to load dependency System.Web.Mvc of assembly DotNetOpenAuth.Core,
Version=4.3.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246 because of the following error : The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Failed to load dependency log4net of assembly DotNetOpenAuth.Core, Version=4.3.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246 because of the following error : The system cannot find the file specified. (Exception from HRESULT: 0x80070002)
该项目只是调试和构建良好。实现这一目标的正确方法是什么?
答案 0 :(得分:7)
您必须预热Web应用程序的初始化。这将首次加快主页的负荷。为您提供简要的概念性概述:
1)在向网站发出第一个请求之前,不会生成工作进程。工作进程与应用程序池关联。当进程启动网站时,工作进程的产生可以是时间进程。所以第一步是提前生成工作进程(w3wp.exe)。这可以在应用程序池级别完成
2)第一次请求到网站;工作进程加载所有应用程序DLL以执行请求。这个加载dll的过程可能需要时间。此外,当回收App Pool时,工作进程必须再次重新加载所有应用程序dll。所以第二步是通过工作进程预加载dll。这可以在网站级别完成。
应用程序预热模块是IIS 8.0中的内置功能。</ p>
请按照以下链接在IIS中预热您的Web应用程序:
http://blogs.msdn.com/b/amol/archive/2013/01/25/application-initialization-ui-for-iis-7-5.aspx
http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization