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

时间:2010-02-08 11:46:06

标签: iis-6 publish web-applications performance

我有一个使用C#用ASP.Net 3.0编写的Web应用程序,生产机器是带有IIS 6.0和sql server 2005的Windows Server 2003。

申请结构

以下显示了我的ASP.net Web应用程序的结构:

IIS中的

根域应用程序(// localhost / es)包括公共页面,例如:母版页,主题,用户控件,图像文件夹。 根应用程序下的子项目数(// localhost / es / sub-project)。 删除子项目中的web.config 汇编子项目的文件位于根应用程序的bin文件夹下(子项目属性>>编译>>构建输出路径:.. \ bin \ 我的应用程序是一个3层Web应用程序(偏差层,数据层和表示层。此外,每个aspx页面的代码都在cs文件后面)

IIS设置

应用程序池 “1740分钟”后的回收工人流程 闲置超时工作进程空闲后“20分钟” Ping工人每隔“30秒”处理一次 工人处理器“90秒”的启动时间限制 工人处理器“90秒”的关闭时间限制

应用程序配置
缓存内存“500”中的有限ASP文件

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

部署应用程序:

我将Web应用程序及其所有文件发布到生产服务器。

问题:

应用程序第一次运行速度非常慢,加载需要10秒钟,但是每次下次请求页面时都会更快。我相信第一次请求页面时,它会编译,通常需要比其他请求更多的时间, 因为页面在缓存中。 这里的问题是为什么第一次编辑页面需要花时间?

尝试解决问题:

我尝试执行以下操作:

  • 将所需文件的副本部署到生产服务器。
  • 更改了IIS设置,更改了工作进程的空闲超时关闭
  • 关闭跟踪
  • 关闭会话状态
  • 禁用页面状态
  • 在web.config中设置debug = false
  • 在根应用程序下创建一个hello world子项目,需要5秒钟。
  • 创建单独的hello word web应用程序,如上所述,加载需要很长时间。
  • 删除page_load事件处理程序中的代码,但它不会影响性能。
  • 只发布根应用程序所需的文件(后面没有代码编写代码),子项目源代码中的所有文件(代码都在后面的代码中),

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

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

8 个答案:

答案 0 :(得分:5)

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

对您的应用程序的第一个请求很慢的另一个原因可能是IIS必须在第一个请求期间启动asp.net工作进程。但是,这不应影响对其他页面的第一次请求。

答案 1 :(得分:2)

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

您遇到的行为是正常的。

答案 2 :(得分:1)

您还可以使用可用于.net framework 4 Web应用程序的自动启动应用程序功能。有关详细信息,请访问here

答案 3 :(得分:0)

答案 4 :(得分:0)

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 

答案 5 :(得分:0)

由于.NET Framework平台中的CLR组件,首次加载任何.NET应用程序时总会有轻微延迟。因为驻留在CLR(ASP.NET的运行时环境)中的JIT(即时)将中间语言(IL)转换为本机机器代码,所以.net应用程序的第一次执行总是需要更长的时间。

有关此特定问题的详细视频可在以下网址查看:

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

希望它有所帮助。

答案 6 :(得分:0)

对于在IIS 7.0及更低版本上运行的asp.net应用程序,编写预热程序或脚本是防止应用程序池空闲超时的最佳方法。 可以从同一应用程序或外部网站或程序设置此预热触发器。 您可以在article

中找到实现相同目标的不同方法

答案 7 :(得分:-4)

没有办法解决这个问题。在网站编译时,您将始终在第一次加载时稍微延迟。