6

我有一个使用 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 子项目的 assemble 文件位于根应用程序的 bin 文件夹下(子项目属性 >> 编译 >> 构建输出路径:..\bin\ 我的应用程序是一个 3 层 Web 应用程序(偏差层,数据层和表示层。此外,每个aspx页面都有其cs文件后面的代码)

IIS 设置

Application pool Recycling Worker Process after "1740 in minutes" 空闲后的空闲超时工作进程 "20 in minutes" Ping 工作进程每 "30 秒"
工作进程的启动时间限制 "90 秒" 工作进程的停机时间限制 "90 秒"

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

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

部署应用程序:

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

问题 :

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

尝试解决问题:

我尝试执行以下操作:

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

但是,应用程序仍然启动缓慢,但随后变得更快。

请帮助诊断和解决这个问题。

4

9 回答 9

5

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

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

于 2010-02-08T12:11:10.693 回答
2

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

您遇到的行为是正常的。

于 2010-02-08T11:59:39.583 回答
1

您还可以使用可用于 .net framework 4 Web 应用程序的自动启动应用程序功能。欲了解更多信息,请访问此处

于 2013-05-13T19:05:16.410 回答
1

我在 ruby​​ on rails 应用程序中也有同样的乘客,但我找到了一个很好的工具(http://www.wekkars.com),它只是阻止网络服务器进入睡眠状态。

于 2012-03-13T12:01:45.260 回答
1

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

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

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

希望能帮助到你。

于 2015-05-10T08:19:43.233 回答
0

尝试预编译您的网站:

http://msdn.microsoft.com/en-us/library/ms227972.aspx

于 2010-07-24T11:33:44.800 回答
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 
于 2014-12-01T17:08:54.000 回答
0

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

于 2016-05-21T22:19:55.627 回答
-4

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

于 2010-02-08T11:59:11.847 回答