【问题标题】:IIS Express localhost loads very slowly for the first requestIIS Express localhost 对于第一个请求的加载速度非常慢
【发布时间】:2019-03-20 10:27:15
【问题描述】:

请在关闭之前查看下面的我尝试过的事情列表。


问题:

  • 我创建了一个全新的 ASP.NET MVC 应用程序,我构建了该应用程序并运行它 --> 加载页面需要 20-30 秒
  • 每次我重新构建应用程序然后尝试加载页面时,即使我在上一次构建之后立即这样做也需要 20-30 秒(即,不是空闲超时问题,我猜?)。

从昨天开始,我一直在努力解决这个问题,我阅读了所有我能找到的关于这个问题的帖子/文章,但没有运气。不过,我不得不承认我是 ASP.NET 和 Web 开发的新手,并且不熟悉 IIS 配置,所以我可能遗漏了一些东西。

我尝试过的事情:

  • 禁用防病毒和防火墙。

  • 通过在 hosts 文件中注释 ::1 localhost 行来禁用 IPv6。我的主机文件如下所示:

    127.0.0.1       localhost
    # ::1             localhost
    
  • 尝试了不同的浏览器。

  • 更改了应用程序 URL 的端口。

  • 将应用程序 URL 从 localhost:port 更改为 127.0.0.1:port 但是当我这样做时,我得到:

    错误的请求 - 无效的主机名

  • 卸载并重新安装 IIS Express(尝试了多个版本:7.5、8.0 和 10.0)。

  • 尝试在Internet Information Services\World Wide Web Services下安装“应用程序开发功能”。

  • 启动 VS 安装程序并运行修复。

环境信息:

  • Windows 7 x64。
  • Visual Studio 2015。
  • .NET 4.5.2.
  • IIS 当前启用的功能:我正在使用 IIS Express,所以我不确定这是否相关。

知道是什么导致了这个问题吗?


更新:

我刚刚尝试使用 Jexus Manager。从.sln 文件加载配置,如here 所示,启动网站并尝试以下场景:

  • 重启后浏览网站(Jexus Manager 中的两个操作)-> 15-20 秒。
  • 在 VS 中重建解决方案后浏览网站(使用 Jexus) --> 30 多秒。

【问题讨论】:

  • 您可能会尝试直接在 IIS Express 上运行您的 Web 应用程序(通过命令行或 Jexus Manager 之类的工具)。然后测量这种情况下的性能并与您从 Visual Studio 获得的值进行比较。没有它,您无法判断问题出在 IIS Express 还是 Visual Studio。
  • @LexLi 感谢您的建议。我下载了 Jexus Manager 并尝试了它。请检查上面的“更新”部分。
  • 您能否在 Jexus 管理器中启用 IIS Express 登录并检查 IIS 日志文件中记录的请求所用时间?
  • @LexLi 这里是a screenshot,如果需要,这里是文本版本:pastebin.com/emHaQnhG

标签: asp.net asp.net-mvc iis visual-studio-2015 iis-express


【解决方案1】:

当您第一次启动 Asp.Net MVC 应用程序时会发生很多事情,因此我无法准确指出可能导致瓶颈的一件事,但请尝试遵循可能有助于您缩短启动时间的建议网络应用:

  1. 始终在发布模式下从 Visual Studio 运行您的 Web 应用(我知道您知道,但还是得说)
  2. 检查您的 web.config 文件并确保 System.Web\compilation 具有 debug=false
  3. 检查Global.asax.cs 文件中的Application_Start 方法以删除不必要的调用
  4. 默认情况下,Razor 视图是在运行时编译的,因此如果您在运行时不对视图进行任何修改,请确保您正在预编译您的 Razor 视图,最好使用RazorGenerator 进行编译您的意见。
  5. 使用分析器分析您的应用程序,例如Glimpse

我希望这会在启动期间为您的应用带来一些提升。

【讨论】:

  • 为了测试,我使用了一个带有默认 MVC 模板的项目(没有添加任何内容)所以我猜第 2 点和第 3 点很可能不相关,但我会在明天尝试你的所有建议并提供反馈。
  • 谢谢! Glimpse 建议在显示一些数字方面确实很有帮助。 This is an example of the results I got。这些数字正常吗?仅供参考,它在发布模式下运行,它是我在上面的 comment 中显示的 almost empty project
  • 问题是我最近才开始学习ASP.NET(来自桌面背景)。所以,我正在尝试它(遵循一些教程),自然地,我不断地进行小改动,重建,并尝试检查结果以确认我做对了。每次我重建时(不包括构建时间)都必须等待 30 秒才能加载页面,这真是令人沮丧!
  • 我知道痛苦,去过那里。从摘要视图不能说什么,如果您可以发布详细视图,其中按方法分解时间可能有人可以识别问题。此外,如果您想在视图(cshtml)中进行更改,则建议您无需重建项目,只需刷新页面,您的更改就会出现。对于backed,尝试使用类似于windows应用的edit and continue。
【解决方案2】:

这可能是由于以下原因:

  • 服务器的处理负载很重。
  • 特定的工作进程一直处于空闲状态。
  • 没有新的处理空间可用。

有一个伪装得很好的选项,称为空闲超时操作,可以在应用程序池高级设置上进行更改。 time-out 操作默认设置为 Terminate,这意味着托管该站点的 Windows 进程将被终止。如果发生这种终止,则必须构建站点并在下次访问时启动该过程,从而导致首次加载非常慢。

如果您只为您的服务或少数网站运行专用服务器,那么它显然会限制您的风格。在这些情况下,将其设置为 0 是可行的方法。其他争辩说1740分钟。为什么?它是超过 24 的最小素数(以小时为单位)。

要在 Microsoft Windows Server 2012 R2 上将 空闲超时操作 更改为 0,请访问 IIS 并选择为您的站点提供服务的应用程序池,然后在右侧菜单中选择高级设置,找到 Idle Time-Out (minutes) 选项,将其更改为 0,然后按 OK。

另一种可能的解决方案:安装 IIS 功能应用程序初始化。那么它应该使用这个配置:

  • 在应用程序池上将启动模式设置为 AlwaysRunning
  • 已启用预加载到网站级别的True

【讨论】:

    猜你喜欢
    • 2018-03-22
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多