我有一个使用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秒钟,但是每次下次请求页面时都会更快。我相信第一次请求页面时,它会编译,通常需要比其他请求更多的时间, 因为页面在缓存中。 这里的问题是为什么第一次编辑页面需要花时间?
尝试解决问题:
我尝试执行以下操作:
然而,应用程序仍然开始缓慢但随后变得更快。
请帮助诊断并解决此问题。
答案 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)
没有办法解决这个问题。在网站编译时,您将始终在第一次加载时稍微延迟。