首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC 4反射对性能的影响

ASP.NET MVC 4反射对性能的影响
EN

Stack Overflow用户
提问于 2013-05-30 14:22:29
回答 1查看 2.4K关注 0票数 1

我对5天前开始的ASP.NET MVC开发非常陌生。你可以说只是在研发阶段。我喜欢MVC的开发风格,但当我的一个朋友告诉我,由于使用了反射,ASP.NET MVC的性能无法与WebForms相比时,我开始感到困惑。例如:

代码语言:javascript
复制
@Html.EditorFor(model => model.FieldName)

MVC正在使用反射。因此,根据他的说法,我们应该使用普通的HTML标签来克服反射。例如:

代码语言:javascript
复制
<input id="FieldName" class="text-box single-line" type="text" value="" name="FieldName" data-val-required="FieldName is required." data-val="true" />

我试着通过在互联网上搜索来消除困惑,找到了以下内容:

ASP.NET MVC Performance

Why use lambdas in ASP.NET MVC instead of reflection?

Reflection and performance in web

但是这些主题并没有清楚地告诉我,使用普通的HTML是否会给我带来更好的性能,以及在MVC大规模应用程序中什么是最好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-30 14:57:43

你几乎可以保证非反射版本会更快,因为它需要做的工作更少。然而,我预计差别会很小。我用两个不同的模板做了一些基本的测试。

使用Html帮助程序的模板1:

代码语言:javascript
复制
@for (int i = 0; i < 10000; i++)
{
    @Html.EditorFor(model => model.FieldName)  
}

使用纯HTML的模板2:

代码语言:javascript
复制
@for (int i = 0; i < 10000; i++)
{
    <input id="FieldName" class="text-box single-line" type="text" value="" name="FieldName" data-val-required="FieldName is required." data-val="true" />
}

为了测试性能,我使用了MiniProfiler库,它可以让我们了解渲染模板所花费的时间。在对结果求平均时,我得到以下值:

  • Template 1(带超文本标记语言帮助程序):405.8
  • 2(普通超文本标记语言):82.1 ms

因此,差异是323.7 ms,是5倍的差异。然而,我们已经使用10000次迭代进行了测试,这可能不是模板中的默认行为。如果我们将模板更改为更合理的默认值,例如10次,我们将得到以下结果:

  • 模板1(带超文本标记语言帮助程序):3.7
    • 2(普通超文本标记语言):0.5

现在您仍然可以看到一些差异(3.2ms),但在我看来这是可以忽略不计的。在这一点上,我根本不会去看性能,而是只看你喜欢的风格。如果你想完全控制你的HTML,那就选择普通的HTML版本。如果您想拥有HTML helper提供的所有额外功能(比如自动将注释转换为jQuery验证属性),请使用该方法。在大多数情况下,这两种方法之间的差异将足够小,不会产生很大的影响。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16829278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档