在Razor视图中使用Partials的性能成本

时间:2011-04-21 05:26:21

标签: c# asp.net-mvc-3 razor

我喜欢在Razor视图中使用partials。它使代码更好,更干净。但是使用partials有任何显着的性能成本吗?我创建了一个简单的测试。它表明使用partials 更慢。

test.cshtml:

@{
   var stopwatch = new System.Diagnostics.Stopwatch(); 
   stopwatch.Start();         
   for(var i=0; i<1000; i++) {
      var str = "my string #" + i;        
      @Html.Partial("_MyPartial",str)  // replace with @str on second test
      <br />        
   }
   stopwatch.Stop();
   <br />
   @: Time elapsed (ms): @(stopwatch.ElapsedMilliseconds)
}

_MyPartial.cshtml:

@Model

部分在340ms内执行的代码,而内联@str代码显示0或1 ms。这对我来说真的很震撼,因为这意味着我应该摆脱所有可爱的局部,至少在循环中。

如果有人想确认或批评我的实验,我们非常欢迎您。

3 个答案:

答案 0 :(得分:9)

  1. 确保您没有以调试模式运行站点,并且MVC项目正在发布配置中进行编译。在调试模式下运行站点会使MVC跳过一堆缓存
  2. 您没有提供基线代码,因此很难确定您的结论是否合理。
  3. 您认为对Partial进行1000次通话很常见吗?好像你在测量一个不现实的场景。在任何相当复杂的网站中,数据库调用的成本通常会使任何视图代码相形见绌。
  4. 请观看此视频:http://channel9.msdn.com/Series/mvcConf/mvcConf-2-Steven-Smith-Improving-ASPNET-MVC-Application-Performance

答案 1 :(得分:2)

在这个操作中,你有一个秒表,循环1000次,并访问该部分。部分位于单独的内存位置,甚至可能需要磁盘I / O访问才能加载。它显然不如将该代码放在页面本身上。

但是不要拒绝处处的部分。如果您处于没有在页面上多次加载的代码的情况下(与您显示的代码不同),则部分内容非常有用,并且它们造成的性能损失并不严重,您应该感到困扰。

答案 2 :(得分:-1)

是的,使用partials确实会造成性能损失;必须打开和读取新文件,IO总是很慢/昂贵。