And*_*rew 5 c# asp.net performance razor roslyn
为了在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>
Run Code Online (Sandbox Code Playgroud)
但是,在生产部署之后,每个视图/控制器似乎都有明显的"第一次加载"延迟,这比没有启用此编译器时更糟糕.
重要的是,此延迟是您从部署的新站点获得的常规JIT延迟的补充.页面明显较慢,而VBCSCompiler.exe似乎在后台运行以"进一步编译"这些页面.
是否有预编译/优化此情况的最佳实践,以消除部署后的首次加载运行时延迟?理想情况下,VBCSCompiler.exe在部署发生后未运行,并在构建时执行.
我已经看到了aspnet_compiler.exe的提及,并遇到了StackExchange.Precompilation(请参阅https://blog.stackoverflow.com/2015/07/announcing-stackexchange-precompilation/)并想知道这是否是正确的修复方法.
有没有人对这个特殊问题有任何经验?谢谢.
您可以使用StackExchange.Precompilation 中的 RoslynRazorViewEngine:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RoslynRazorViewEngine());
Run Code Online (Sandbox Code Playgroud)
然而,这个视图引擎的主要目标并不是消除启动性能问题。有了它,您就可以获得 C#6 支持。视图仍然必须在第一次加载时进行编译,但 roslyn 程序集随后会出现在应用程序域中,并且您会获得更高的内存占用。由于 roslyn 在应用程序中被调用,因此您不需要 Web 服务器上的特殊权限即可.exe
从/bin
文件夹中执行另一个操作。我们主要用它来在我们的开发机器上进行开发。
我强烈建议您预编译所有视图。这样,您就不会受到启动性能影响,并且可以获得视图的编译时验证。您甚至可以对生成的视图代码运行分析器。这就是 StackOverflow 目前在生产环境中运行的内容。
我aspnet_compiler.exe
在那篇博文中提到过,因为它是 ASP.NET(无 MVC)上预编译的原始工具。不幸的是它非常慢。
归档时间: |
|
查看次数: |
1133 次 |
最近记录: |