避免VBCSCompiler对Roslyn驱动的ASP.NET Razor MVC视图的影响?
为了在MVC5的Razor视图中支持C#6,我们通过web.config打开了Roslyn编译器平台:
但是,在生产部署之后,每个视图/控制器似乎都有明显的“第一次加载”延迟,这比没有启用此编译器时更糟糕。
重要的是,此延迟是您从部署的新站点获得的常规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());
然而,这个视图引擎的主要目标 不是摆脱启动性命中。 有了它,你只需要C#6支持。 仍然必须在第一次加载时编译视图,但之后roslyn程序集最终在app域中,并且您获得更高的内存占用。 由于在应用程序中调用了roslyn,因此您无需Web服务器上的特殊权限即可从/bin
文件夹中执行另一个.exe
。 我们主要使用它来开发我们的开发机器。
我强烈建议您只预编译所有视图 。 这样您就不会获得启动性命中,并且您可以获得视图的编译时validation。 您甚至可以在生成的视图代码上运行分析器。 这就是StackOverflow目前在生产中运行的内容。
我在aspnet_compiler.exe
博文中提到了aspnet_compiler.exe
,因为它是ASP.NET上预编译的原始工具(没有MVC)。 不幸的是,这很慢。
如果Roslyn编译器程序集不是NGen,则可能需要一些时间来启动VBCScompiler.exe(它引用了几个大型托管程序集,并且JIT它们需要时间)。 为了减少JIT周期,您可以NGEN机器上的所有Rsolyn组件。 您也可以从此博客中找到一些帮助信息。
- Response.WriteFile – 写出一个字节流
- 升级到Visual Sudio 2015,现在无法在调试中达到断点
- Interop.Word Documents.Open为null
- 如果在C#中的Catch块中发生exception会发生什么。 在这种情况下,调用者结果也是如此
- Web用户控件(.ascx)可以使用CSS文件进行样式设置吗?
- 使用asp.net和C#列出目录中的文件夹
- Web服务错误“提供的URI方案’http’无效; 预计’https’。“
- asp.net linkbutton onclientclick和postback
- 使用预先存在的访问令牌通过ASP.NET创建YouTube服务