【问题标题】:ASP.NET MVC 4 Reflection effect on performanceASP.NET MVC 4 反射对性能的影响
【发布时间】:2013-05-30 06:22:28
【问题描述】:

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

@Html.EditorFor(model => model.FieldName)

MVC 正在使用反射。所以按照他的说法,我们应该使用普通的 HTML 标签来克服反射。例如

<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 大规模应用程序中最好的方法是什么。

【问题讨论】:

  • 这就是微优化。您是否确定需要提高性能?通过调整数据库索引,您可能会获得更快的速度。
  • @jgauffin 这就是我最初的想法。但是我需要通过询问专家来消除我的困惑,因为我是全新的。感谢您抽出一些时间。 :)
  • 嗯嗯嗯提高了我对反射的理解。所以总结是,如果你不使用它数百万次,那么性能没有显着差异。谢谢各位。

标签: asp.net .net asp.net-mvc performance reflection


【解决方案1】:

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

使用 Html 助手的模板 1:

@for (int i = 0; i < 10000; i++)
{
    @Html.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" />
}

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

  • 模板 1(带有 HTML 帮助器):405.8 毫秒
  • 模板 2(纯 HTML):82.1 毫秒

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

  • 模板 1(带有 HTML 助手):3.7 毫秒
  • 模板 2(纯 HTML):0.5 毫秒

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

【讨论】:

  • 谢谢埃里克。如果我只想在表格中显示数据,我会更喜欢使用这两种方法,然后我认为简单 HTML 是一个不错的选择,而不是 HTML Helper 来显示标签,但是在插入和更新数据的情况下,我认为 HTML helper 将是一个具有内置功能的好候选人。 :) 感谢您帮助我并告诉我这个神奇的工具 MiniProfiler。我不知道。
  • @UsmanKhalid 当然,组合也是有效的。您的用例听起来是同时使用两者的有效案例。享受 MiniProfiler,它实际上是由建立 Stackoverflow.com 的人开发的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2013-08-30
  • 2021-03-09
相关资源
最近更新 更多