查找:DisplayTemplates速度

时间:2012-08-01 11:33:29

标签: asp.net-mvc mvc-mini-profiler

我在新的MVC4站点上安装了Mini-Profiler,并注意到某些Find: DisplayTemplates的等待时间很长,包括String和DateTime。以下是一个例子。在另一个问题中,Sam Saffron谈到了寻找步骤

  

在随后的运行中它很快(除非你有一些非常糟糕的事情)

但是每次加载页面都会发生以下情况:

http://localhost:80/SLS.Site/s/hogwarts/lunch...     2.6    +0.0
  Check School Permissions                           2.4    +2.0     1 sql   0.9
  Controller: SchoolAdmin.LunchGroupsController...   4.0    +4.5
  Find: Index                                        0.4    +8.6
  Render : Index                                    70.0    +9.1     2 sql   13.0
   Controller: SchoolAdmin.LunchGroupsController...  2.6    +12.3
   Find: BuildingTree                                0.4    +14.9
   Render partial: BuildingTree                      4.4    +15.4    1 sql   3.2
   Controller: SchoolAdmin.LunchGroupsController...  3.3    +20.2
   Find: Teachers                                    0.6    +23.6
   Render partial: Teachers                          4.3    +24.3    1 sql   2.4
   Find: DisplayTemplates/String                   409.3    +31.9
   Render partial: _UserContext                      0.0    +441.3
   Find: _LoginPartial                               1.2    +441.4
   Render partial: _LoginPartial                     0.2    +442.6
                                                                     3.9 % in sql

有什么想法吗?

修改

我有4个区域设置,所以我认为它遍历所有目录寻找匹配,所以我删除了2个区域并具有相同的行为。

2 个答案:

答案 0 :(得分:3)

我确实有同样的问题......经过一番搜索我发现我在使用:

@DisplayFor(x => x.StringProperty);

在考虑了这个问题后,发现自己制作一些模板时所有DisplayFor / EditorFor方法的工作方式都没有用,这没什么意义。

(关于DisplayFor / EditorFor如何工作的一些解释)

当使用DisplayFor / Editor时,MVC获取对象的type,然后在Views/ControllerName/DisplayTemplates目录中搜索与该类型同名的视图,在这种情况下,它正在搜索{{ 1}}。因为它不存在,它在Views/ControllerName/DisplayTemplates/String.cshtml视图目录中也是如此,它也不会存在。

(下一步是推测)

我认为因为它无法找到相关的显示/编辑器模板,所以它会在对象上执行ToString()作为故障转移。

由于您只是显示字符串类型,因此不使用Shared/DisplayTemplates并使用DisplayFor(x => StringProperty)是有意义的,这不会导致MVC搜索@Model.StringProperty,并且只是将它渲染成一个字符串,无论如何它都会发生。

答案 1 :(得分:2)

一旦我在<head>的捆绑包周围放置了一个分析块,我就可以看到真正花费的时间。 Mini-profiler误导了我,原来是: 花费在DisplayTemplates/String但是在其他地方!

就我而言,延迟发生在MVC4 RC的脚本捆绑中。

我删除了捆绑包,一切都很好。

请参阅以下相关问题:

MVC4 RC script bundling very slow