我正在开发windows azure云服务。第一次点击登录按钮需要6到7秒,但是有一段时间我点击相同的登录按钮需要2秒钟。我无法理解为什么会发生这种情况,所以虽然服务器端代码对于两个处理都相同,但后续调用比第一次调用更安静?
答案 0 :(得分:5)
“First-hit”延迟在ASP.NET应用程序中非常常见。存在JIT编译的开销,并且可能无法初始化各种“池”(数据库连接,线程等)。如果您有一个ASP.NET Web窗体应用程序,则每次访问时都会编译每个.aspx页面,而不是在服务器启动时编译。此外,在第一次命中时,不会初始化使后续请求更快的各种缓存机制(服务器或客户端)。在第一次点击时,将运行Application_Start中的任何代码,设置路由表并进行任何其他初始化。
您可以采取各种措施防止用户看到此延迟。最简单的是编写某种自动化流程,在部署新版本后点击每个页面并运行它。当实际部署站点时,还有一些IIS模块将在Application_Start之前运行代码。 Search for "ASP.NET warmup"找到那些。
如果您的ASP.NET应用程序池被回收,您可能会在一段时间不活动后遇到延迟 - 这会重置一堆内容并导致启动代码在下一个请求时再次运行。您可以通过设置某些内容来频繁ping网站上的页面来改善此效果,这样,如果应用程序池被回收,它将自动再次预热,而不是在下一个实际的用户请求中。使用正常运行时间监视服务将适用于此,或Azure生态系统内的计划任务。