在Razor视图中使用局部的性能代价

本文关键字:性能 代价 用局 Razor 视图 | 更新日期: 2023-09-27 17:50:38

我喜欢在我的Razor视图中使用局部。它使代码简洁美观。但是,使用偏导数是否有显著的性能成本?我创建了一个简单的测试。它表明使用偏导数要慢得多。

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。这对我来说真的很震惊,因为这意味着我应该摆脱所有可爱的部分,至少是那些循环。

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

在Razor视图中使用局部的性能代价

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

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

但不要处处排斥偏导。如果您没有在页面上加载多次的代码(不像您所展示的代码),那么部分代码是非常有用的,并且它们造成的性能损失不会严重到您应该担心的程度。

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