【问题标题】:Avoid VBCSCompiler perf hit on Roslyn powered ASP.NET Razor MVC views?避免 VBCSCompiler 性能对 Roslyn 驱动的 ASP.NET Razor MVC 视图造成影响?
【发布时间】:2017-02-19 22:49:48
【问题描述】:

为了在 MVC5 上的 Razor 视图中支持 C# 6,我们通过 web.config 打开了 Roslyn 编译器平台:

<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
    </compilers>
</system.codedom>

但是,在生产部署之后,每个视图/控制器似乎都有明显的“首次加载”延迟,这比不启用此编译器时更糟。

重要的是,这种延迟是除了您从正在部署的新站点获得的常规 JIT 延迟之外的延迟。页面明显变慢,而 VBCSCompiler.exe 似乎在后台运行以“进一步编译”这些页面。

是否有预编译/优化这种情况以消除部署后首次加载运行时延迟的最佳做法?理想情况下,VBCSCompiler.exe 在部署后不会运行,而是在构建时执行。

我看到过提到 aspnet_compiler.exe 并遇到过 StackExchange.Precompilation(请参阅 https://blog.stackoverflow.com/2015/07/announcing-stackexchange-precompilation/),我想知道这是否是正确的解决方法。

有人对这个特殊问题有任何经验吗?谢谢。

【问题讨论】:

    标签: c# asp.net performance razor roslyn


    【解决方案1】:

    您可以使用RoslynRazorViewEngine from StackExchange.Precompilation:

    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new RoslynRazorViewEngine());
    

    这个视图引擎的主要目标,然而,不是摆脱启动性能命中。有了它,您只需获得 C#6 支持。视图仍然需要在首次加载时进行编译,但是 roslyn 程序集之后会在应用程序域中结束,并且您会获得更高的内存占用。由于在应用程序中调用了 roslyn,因此您不需要 Web 服务器上的特殊权限即可从 /bin 文件夹执行另一个 .exe。我们主要将其用于开发机器上的开发。

    我强烈建议您使用precompile all the views。这样您就不会受到启动性能的影响,并且您可以在编译时验证您的视图。您甚至可以在生成的视图代码上运行分析器。这就是 StackOverflow 当前在生产环境中运行的内容。

    我在那篇博文中提到了aspnet_compiler.exe,因为它是在 ASP.NET(无 MVC)上进行预编译的原始工具。不幸的是它很慢。

    【讨论】:

      【解决方案2】:

      如果 Roslyn 编译器程序集不是 NGen 的,则启动 VBCScompiler.exe 可能需要一些时间(它引用了几个大型托管程序集,并且 JIT 需要一些时间)。要减少 JIT 周期,您可以对机器上的所有 Rsolyn 程序集进行 NGEN。您也可以从this blog 找到一些帮助信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多