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

ASP.NET MVC 4反射对性能的影响,asp.net,.net,asp.net-mvc,performance,reflection,Asp.net,.net,Asp.net Mvc,Performance,Reflection,我对ASP.NETMVC开发非常陌生,5天前就开始了。你可以说只是在研发阶段。我喜欢MVC的开发风格,但当我的一位朋友告诉我ASP.NET MVC的性能由于使用反射而无法与WebForms相比时,我开始感到困惑。e、 g: @Html.EditorFor(model => model.FieldName) MVC正在使用反射。因此,他认为,我们应该使用普通的HTML标记来克服反射。e、 g <input id="FieldName" class="text-box single-l

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

@Html.EditorFor(model => model.FieldName)
MVC正在使用反射。因此,他认为,我们应该使用普通的HTML标记来克服反射。e、 g

<input id="FieldName" class="text-box single-line" type="text" value="" name="FieldName" data-val-required="FieldName is required." data-val="true" />

我试图通过在互联网上搜索来消除困惑,结果发现:




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

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

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

@for (int i = 0; i < 10000; i++)
{
    @Html.EditorFor(model => model.FieldName)  
}
@for(int i=0;i<10000;i++)
{
@EditorFor(model=>model.FieldName)
}
使用普通HTML的模板2:

@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" />
}
@for(int i=0;i<10000;i++)
{
}
为了测试性能,我使用了这个库,它让我们了解了渲染模板所花费的时间。平均结果时,我得到以下值:

  • 模板1(带有HTML帮助程序):405.8 ms
  • 模板2(纯HTML):82.1毫秒
因此,差异323.7 ms,为系数5差异。然而,我们已经使用10000次迭代完成了测试,这可能不是模板中的默认行为。如果我们将模板更改为更合理的默认值(如10次),我们将得到以下结果:

  • 模板1(带有HTML帮助程序):3.7 ms
  • 模板2(纯HTML):0.5毫秒

现在你仍然可以看到一些不同(3.2ms),但在我看来这是微不足道的。在这一点上,我根本不会看性能,而只看你喜欢什么风格。如果你想完全控制你的HTML,选择纯HTML版本。如果您想拥有HTML助手提供的所有附加功能(如自动将注释转换为jQuery验证属性),请使用该方法。在大多数情况下,这两种方法之间的差异很小,不会产生太大的影响。

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

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

@for (int i = 0; i < 10000; i++)
{
    @Html.EditorFor(model => model.FieldName)  
}
@for(int i=0;i<10000;i++)
{
@EditorFor(model=>model.FieldName)
}
使用普通HTML的模板2:

@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" />
}
@for(int i=0;i<10000;i++)
{
}
为了测试性能,我使用了这个库,它让我们了解了渲染模板所花费的时间。平均结果时,我得到以下值:

  • 模板1(带有HTML帮助程序):405.8 ms
  • 模板2(纯HTML):82.1毫秒
因此,差异323.7 ms,为系数5差异。然而,我们已经使用10000次迭代完成了测试,这可能不是模板中的默认行为。如果我们将模板更改为更合理的默认值(如10次),我们将得到以下结果:

  • 模板1(带有HTML帮助程序):3.7 ms
  • 模板2(纯HTML):0.5毫秒

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

这就是微观优化。你确定你需要这种性能提升吗?通过调整DB索引,您可能会获得更快的速度。@jgauffin这是我最初的想法。但是我需要通过询问专家来消除我的困惑,因为我是全新的。谢谢您抽出时间。:)可能是Hmmmmm的复制品,提高了我对反射的理解。因此,总结是,如果你没有使用它数百万次,那么没有显着的性能差异。谢谢你们,这就是微优化。你确定你需要这种性能提升吗?通过调整DB索引,您可能会获得更快的速度。@jgauffin这是我最初的想法。但是我需要通过询问专家来消除我的困惑,因为我是全新的。谢谢您抽出时间。:)可能是Hmmmmm的复制品,提高了我对反射的理解。因此,总结是,如果你没有使用它数百万次,那么没有显着的性能差异。谢谢你们,谢谢埃里克。如果我只想在表中显示数据,那么我认为简单HTML是显示标签的好选择,而不是HTML帮助程序,但如果插入和更新数据,我认为HTML帮助程序将是其内置功能的好选择。:)谢谢你帮助我,告诉我这个神奇的工具MiniProfiler。我不知道。@UsmanKhalid一个组合当然也是有效的。您的用例听起来是同时使用两者的有效案例。享受MiniProfiler吧,它实际上是由创建Stackoverflow.com的人开发的。谢谢Eric。如果我只想在表中显示数据,那么我认为简单的HTML是一个不错的选择,而不是使用HTML来帮助di