ASP.Net应用程序运行在第一次

问题描述:

我用C#写的ASP.Net 3.0 Web应用程序缓慢,生产机器是Windows Server 2003与IIS 6.0和SQL Server 2005ASP.Net应用程序运行在第一次

应用程序结构

下面显示我的ASP.net web应用程序的结构:在IIS(//本地主机/ ES)包括公共的页面,例如

根应用:主页,主题,用户控制,图像文件夹。 根应用程序下的子项目数量(// localhost/es/sub-project)。 在子项目中删除web.config 子项目的汇编文件在根应用程序的bin文件夹下(子项目属性>>编译>>编译输出路径:.. \ bin \ 我的应用程序是一个3层Web应用程序(长度相关层,数据层和表示层。另外,每一个aspx页面具有其背后CS文件代码)

IIS设置

应用池 回收工作进程 空闲后“1740(分钟)”在空闲后超时工作进程“20分钟” Ping工作进程每“30秒”对于工人processer“90秒”为工人processer Shoutdown时间限制“90秒”

应用程序配置
缓存有限的ASP内存中的文件 启动时间限制“500”

缓存有限的ASP磁盘上的文件“2000”

部署应用:

我公布其所有的文件到生产服务的Web应用程序河

问题:

应用程序运行在第一时间相当缓慢,需要向上10秒加载,但每次在一个页面被请求它的速度更快的下一次。我相信,在第一次请求页面时,它会进行编译,并且通常比其他请求需要更多时间,因为该页面位于高速缓存存储器中。 这里的问题是为什么在第一次编译页面时需要花费时间?

尝试解决问题:

我试着做到以下几点:

  • 部署所需的文件的副本给生产服务器。
  • 更改IIS设置,改变了关闭工作进程
  • 关闭跟踪
  • 关闭会话状态
  • 禁用视图状态页面
  • 设置调试=在网络虚假下来空闲超时。config
  • 在根应用程序下创建hello world子项目需要5秒。
  • 创建单独的hello word Web应用程序,如上所述需要很长时间才能加载。
  • 删除page_load事件处理程序中的代码,但它不影响性能。
  • 只发布根应用程序所需要的文件(没有写在后面的代码的代码),并在分项目的源代码的所有文件(代码在后面的代码),

然而,应用程序仍然开始缓慢,但后来它变得更快。

请帮助诊断和解决此问题。

+0

http://stackoverflow.com/questions/13386471/fixing-slow-initial-load-for-iis – 2013-11-26 02:40:31

有没有办法解决这个问题。网站编译时,您首次加载时总是会稍微延迟。

发布预编译的网站,而不是复制它。

您正在经历的行为是正常现象。

除了上面说的什么之外,您还可以运行“热身脚本”作为部署过程的最后一步。虽然这不会加快第一次编译所需的时间,但使用这样的脚本至少可以防止用户看到启动缓慢。 这里看一看这样的脚本的例子: http://programmerramblings.blogspot.com/2008/09/aspnet-site-warmup.html

另一个原因是您的应用程序非常第一个请求是缓慢可能是因为IIS有第一个请求期间启动asp.net工作进程。但是,这应该不会影响对其他页面的首次请求。

+0

自动启动Web应用程序是伟大的解决第一次页面的性能最大的缺点是负载 但应用程序不会关闭。 我的应用程序包含很多页面,如果我使用“自动启动”或“预热”会影响内存吗? 剂量预热会对服务器性能产生负面影响吗? 使用“热身脚本”有什么不利吗? – Zahraa 2010-02-09 10:07:20

我在红宝石一样on Rails应用程序与乘客,但我发现了一个很好的工具(http://www.wekkars.com),只是防止Web服务器去睡觉。

您还可以使用自动启动应用程序功能,它可用于.NET框架4的Web应用程序。欲了解更多信息,请访问here

VBscript + Dos Batch file... run every 1 hr 


Dim strNewTime , strSiteName 
strNewTime = Now() 
strNewTime = Replace(strNewTime, "/","") 
strNewTime = Replace(strNewTime, " ","") 
strNewTime = Replace(strNewTime, ":","") 

strSiteName = "https://www.yoursite.com/userlogin.aspx?dummytime=" + strNewTime 

Dim oXMLHTTP 
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")  

oXMLHTTP.Open "GET", strSiteName, False 
oXMLHTTP.Send 

If oXMLHTTP.Status = 200 Then 
' working 
ELSE 
    CALL SendEmail("!!! www - web site is NOT working... " + strSiteName + " *** ") 
End If 

Set oXMLHTTP = Nothing 
+1

请添加评论以描述您的答案如何解决问题。 – Chrismas007 2014-12-01 17:28:08

总是会有任何.NET应用程序的第一次加载轻微的延迟是由于.NET框架平台CLR组件。因为JIT(准时)位于内CLR(运行环境ASP.NET)中间语言(IL)转换为机器码,它总是会稍微长一点的第一个执行的.NET应用程序。

https://www.youtube.com/watch?v=ruf4U9_Rbss&index=1&list=PL8598C97BA1D871C1

希望它能帮助:

关于这个问题的详细视频可以观看。

有关IIS 7.0和较小的版本上运行或asp.net应用程序,编写程序热身脚本是为了防止应用程序池空闲超时一个最好的办法。 这种热身触发器可以从同一个应用程序或从外部网站或程序设置。 你可以找到不同的方法来达到同样在这个article