在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。这对我来说真的很震惊,因为这意味着我应该摆脱所有可爱的部分,至少是那些循环。
如果有人想确认或批评我的实验,你是非常欢迎的。
- 确保您没有在调试模式下运行站点,并且MVC项目正在发布配置中编译。在调试模式下运行站点使MVC跳过一堆缓存
- 你没有提供你的基线代码,所以很难确定你的结论是否合理。
- 你认为给Partial打1000个电话很常见吗?看起来你在衡量一个不现实的场景。在任何相当复杂的网站中,数据库调用的成本通常会使视图代码相形见绌。
- 请观看此视频:http://channel9.msdn.com/Series/mvcConf/mvcConf-2-Steven-Smith-Improving-ASPNET-MVC-Application-Performance
在这个操作中,你有一个秒表,它循环了1000次,并访问了那个部分。该部分位于单独的内存位置,甚至可能需要磁盘i/o访问才能加载。这显然不如把代码放在页面上。
但不要处处排斥偏导。如果您没有在页面上加载多次的代码(不像您所展示的代码),那么部分代码是非常有用的,并且它们造成的性能损失不会严重到您应该担心的程度。
是的,使用partial确实会造成性能损失;必须打开和读取新文件,并且IO总是很慢/昂贵。