2

更新后使用我们的 MVC Web 应用程序时,第一次加载主页需要几分钟时间。第一次加载后,它加载得非常快。可能 MSIL 代码被编译为本地机器代码并被缓存。(如我错了请纠正我)。这发生在每一页上。

每次将新版本复制到服务器时,速度都很慢。为了解决这个问题,我尝试使用 ngen 对其进行预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)

该项目只是调试和构建良好。实现这一目标的正确方法是什么?

4

1 回答 1

7

您必须预热 Web 应用程序的初始化。这将首次加快主页的加载速度。给你一个简短的概念概述:

1)工作进程直到第一次向网站发出请求时才会产生。工作进程与应用程序池相关联。工作进程的产生可能是耗时的过程,因为该过程启动网站。所以第一步是提前生成工作进程(w3wp.exe)。这可以在应用程序池级别完成

2) 对网站的第一次请求;工作进程加载所有应用程序 DLL 以执行请求。这个加载 dll 的过程可能很耗时。此外,当应用程序池被回收时,工作进程必须再次重新加载所有应用程序 dll。所以第二步是通过工作进程预加载dll。这可以在网站级别完成。

应用程序预热模块是 IIS 8.0 中的内置功能。

请按照以下链接在 IIS 中预热您的 Web 应用程序:

http://technet.microsoft.com/en-us/video/microsoft-virtual-academy-ii8-application-initialization.aspx

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

http://weblog.west-wind.com/posts/2013/Oct/02/Use-IIS-Application-Initialization-for-keeping-ASPNET-Apps-alive

于 2014-04-18T14:13:16.730 回答