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

Usm*_*lid 1 .net asp.net reflection asp.net-mvc performance

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

@Html.EditorFor(model => model.FieldName)
Run Code Online (Sandbox Code Playgroud)

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

<input id="FieldName" class="text-box single-line" type="text" value="" name="FieldName" data-val-required="FieldName is required." data-val="true" />
Run Code Online (Sandbox Code Playgroud)

我试图通过在网上搜索混淆删除并发现以下内容:

ASP.NET MVC性能
为什么在ASP.NET MVC中使用lambdas而不是反射?
网络中的反思和表现

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

Eri*_*oom 6

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

模板1使用Html助手:

@for (int i = 0; i < 10000; i++)
{
    @Html.EditorFor(model => model.FieldName)  
}
Run Code Online (Sandbox Code Playgroud)

模板2使用纯HTML:

@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" />
}
Run Code Online (Sandbox Code Playgroud)

为了测试性能,我使用了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验证属性),请转到该方法.在大多数情况下,这两种方法之间的差异足够小,不会产生很大的影响.