【问题标题】:MVC FindView slow on application startMVC FindView 在应用程序启动时很慢
【发布时间】:2012-09-25 13:23:16
【问题描述】:

是否有运行应用程序并预​​填充 MVC ViewCache 以消除在 Web 应用程序预热期间有时可能发生的 2 秒时间损失?

目前,当我们的应用程序启动时,我们有时会遇到 2 秒的性能延迟时间。一旦启动,只有几毫秒。

如果有帮助,我肯定是在发布模式下运行,并且只使用 Razor 引擎:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        Bootstrapper.Initialise(); //IOC Setup
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        //Only use the RazorEngine. - http://blogs.msdn.com/b/marcinon/archive/2011/08/16/optimizing-mvc-view-lookup-performance.aspx
        ViewEngines.Engines.Clear();

        IViewEngine razorEngine = new RazorViewEngine() { FileExtensions = new string[] { "cshtml" } };

        ViewEngines.Engines.Add(razorEngine);
    }

欢迎提出任何建议。

【问题讨论】:

  • 您在哪个版本的 IIS 上托管您的应用程序?
  • 没关系 - 阅读下面提到的 D. Ward 的文章。

标签: c# .net asp.net-mvc-3 performance asp.net-mvc-views


【解决方案1】:

您可以在 IIS 7.5 中使用新的 ASP.NET AutoStart feature。还要确保在部署应用程序时它在发布模式下运行 (debug="false")。

【讨论】:

  • 谢谢,我正在使用它,但奇怪的是事情并不像你期望的那样即时(这可能是另一个问题)。
  • 您可以通过编写自定义 IProcessHostPreloadClient 提供程序来更进一步,如 ScottGu 的帖子中所示,您可以在其中进行繁重的初始化工作并预热应用程序。
  • 我想过这个问题,但有没有办法迭代所有视图并将它们全部加载...
【解决方案2】:

Dave Ward 在A harsh reminder about the importance of debug=”false” 的 web.config 中讨论了这个问题以及与 debug="false" 相关的其他问题。

在调试模式下,视图分辨率经过优化以便于开发。 MVC 每次都遍历视图解析过程 您的代码呈现一个命名视图。这很有帮助,因为你显然这样做了 希望环境立即响应您的更改 你在一个网站上工作。

然而,在发布模式下,MVC 的视图分辨率针对 表现。当视图位置在发布中成功解析时 模式,MVC 缓存该查找的结果,不需要执行 遇到对命名文件的引用时的另一个文件系统搜索 再次查看。

【讨论】:

  • 谢谢 - 别担心,我已经阅读了 @SamSaffron 博客文章中关于视图缓慢的内容,并且我已经包含了我自己的“Big Pink Box(TM)”方法来检查Http 调试等。所以我知道我们正在“发布”/零售模式下运行
  • 谢谢你 - 这一切都很好,但问题在于第一次视图查找
  • 根据您更新的问题,您已经完成了我所知道的所有优化视图位置的工作。如果还有其他选择,我也想知道!
  • Darin 关于 AutoStart 的回答看起来很有希望。
  • 我正在考虑编写一个快速而肮脏的代码,它将迭代视图文件夹并在视图上调用渲染(希望如此)。如果可以的话,我会尝试分享!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2017-05-05
  • 1970-01-01
  • 2015-11-30
  • 2011-01-01
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多