我在Visual Studio中创建了一个全新的MVC4 Web应用程序,除了为它添加一个Home控制器和一个“Hello world”索引视图之外,它没有做任何事情。然后,我安装了MiniProfiler NuGet包,并在_Layout.cshtml
中添加了必要的几行。这是我在发布模式下运行网站时获得的(在IIS中托管):
渲染时间因页面加载而异,但130ms的速度与它的速度差不多。这对我来说似乎有点慢,因为我已经看到其他人在30ms或更快时间内呈现页面。有关为什么渲染会因为一个全新的空MVC4项目而变慢的想法?我的处理器是Intel Core i5-2400,机器有16GB RAM。
顺便说一下,第一次加载页面时不;在获得130ms的结果之前,我重新加载了几次页面。
更新
我按照PSCoder的回答中的建议(删除除RazorViewEngine之外的所有内容),并将渲染时间减半:
这非常好,但对于页面的主Render
操作,我仍然可以获得大约70毫秒或更高的时间;理想情况下,我想将其减半或更好。
具体来说,我想问:
答案 0 :(得分:76)
这有助于改善ASP.NET MVC相关的性能问题,您可以做的一项性能改进是清除所有视图引擎并添加您使用的引擎。比如说: - RazorViewEngine
。 MVC默认注册2个视图引擎Webforms
和Razor
视图引擎,因此清除和添加单独使用的引擎将提高查找性能。
您可以在global.asax
Application_Start
中添加此内容。
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
为了完全利用视图查找缓存,从而再次获得性能增益,在发布模式下编译代码,并确保web.config
文件配置了<compilation debug="false" />
,以便查看查找缓存以启动。
答案 1 :(得分:56)
添加到@PSL的答案 - 我们只检查`.CSHTML文件
ViewEngines.Engines.Clear();
IViewEngine razorEngine = new RazorViewEngine() { FileExtensions = new string[] { "cshtml" } };
ViewEngines.Engines.Add(razorEngine);
此外,确保您在Release Mode
中运行 - 这绝对是至关重要的,因为ASP / Razor / MVC'在发布模式下应用了一些非常积极的缓存'
<compilation targetFramework="4.0" debug="false">
文件中的 Web.Config
。
Sam Saffron / Stack Overflow也研究了视图渲染性能:
http://samsaffron.com/archive/2011/08/16/Oh+view+where+are+thou+finding+views+in+ASPNET+MVC3+
答案 2 :(得分:0)
视图在使用前编译 - 所以在第一次使用时它们很慢。
随后,如果.cshtml
文件发生更改,则会重新编译它们 - 这意味着正在监视存储视图的目录。因此硬盘速度将是MVC视图的一个因素。
即使它们什么也不做,每个渲染引擎都会检查硬盘上的.cshtml
或.aspx
个文件。由于删除渲染引擎使其运行速度提高了一倍,我怀疑磁盘速度是问题所在:
答案 3 :(得分:0)
预编译视图以加快首次渲染的速度。
查看以下博客。
https://blog.deltacode.be/2017/01/08/fix-slow-startup-of-asp-net-mvc-5-on-azure-app-services/