1

我有一个托管在 Windows azure 上的 ASP.NET (webforms) 应用程序,位于 XS 大小的实例上。一切都运行良好,除了当我在一段时间不使用它后第一次导航到该网站时,它真的很慢——比如超过 45 秒!一旦它启动并运行,页面又好又快;这只是需要很长时间的初始负载。

如何诊断这段时间花在哪里?我已经在 SessionStart 事件中记录(到数据库),并且不同浏览器中的两个请求相隔 10 秒开始,都在同一秒内记录,这表明我添加的任何日志记录或其他代码在所有时间都用完之前不会执行。或者数据库连接可能需要很长时间。

我意识到有一些事情可能会影响这一点,例如

  • 它在 XS 实例上。他们不大。

  • 我的代码目前是在调试模式下构建的。这使得需要加载更大的程序集和 pdb 文件,所以它比它可能的慢。

  • 网站只需要一点时间来加载。这就是人们更改 idleTimeout和可能的回收间隔的原因。

  • 我正在使用相当大的 Telerik 控件,其中包含 32mb 的 dll。(但第一页上没有使用)。

但我想要一种可以用来确定一直在占用什么的方法,例如,对正在发生的事情进行一些测量以及它占用了多长时间,或者我可以做更多的事情来尝试让它更快地启动。

在我的带有本地数据库和网络的开发机器上,启动时间可能是 5 秒。可能它只比 XS 实例快 10 倍,但如果是这种情况,我该如何计算出我的本地机器上花费的时间,以便我可以尝试改进它?

4

1 回答 1

2

那么您的 XS 实例没有专用 CPU 和低 I/O 性能。就像您已经注意到的那样,这可能会影响您的应用程序池的启动速度。您正在加载 Telerik 程序集 (32mb) 的事实会产生一些影响,这不是您可以轻易更改的。

您可以采取以下措施来改善启动时间:

  1. 使用发布构建配置。这意味着您将拥有更小并且可能包含更少代码的优化程序集(取决于预处理器指令)。
  2. 使用 IIS8 中包含的应用程序初始化模块(您需要将 osFamily 更改为 3)。IIS 将确保应用程序立即启动,并将模拟对您的应用程序的请求,以便直接启动它。大多数情况下,这意味着您的用户不会受到初始加载的影响。万一他们在启动时访问了站点,应用程序初始化模块允许您在启动应用程序池时显示加载页面。
于 2012-11-08T21:29:40.900 回答