5

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

在随后的运行中,它快如闪电(除非你遇到了非常糟糕的事情)

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

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 个区域并具有相同的行为。

4

2 回答 2

3

我遇到了完全相同的问题......经过一番搜索后,我发现我正在使用:

@DisplayFor(x => x.StringProperty);

经过思考,通过自己制作一些模板了解了所有 DisplayFor/EditorFor 方法的工作原理,这没有任何意义。

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

当使用 DisplayFor/Editor for 时,MVC 获取typeof 对象,然后在Views/ControllerName/DisplayTemplates目录中搜索与该类型同名的视图,在这种情况下,它正在搜索Views/ControllerName/DisplayTemplates/String.cshtml. 由于它不存在,它在Shared/DisplayTemplatesviews 目录中也是如此,同样,它不会存在。

(接下来的一点是猜测)

我假设因为它找不到相关的显示/编辑器模板,它然后在对象上执行一个 ToString() 作为故障转移。

DisplayFor(x => StringProperty)由于无论如何您只显示一个 String 类型,因此不使用and 只使用是有意义的@Model.StringProperty,这不会导致 MVC 搜索 aDisplayTemplate并将其呈现为字符串,无论如何它都会这样做。

于 2012-09-25T13:14:38.107 回答
2

一旦我在包中放置了一个分析块,<head>我就可以看到真正花费了时间的地方。最初,迷你分析器误导了我:时间没有 花在DisplayTemplates/String其他地方!

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

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

请参阅下面的相关问题:

MVC4 RC 脚本捆绑非常慢

于 2012-08-02T15:36:43.320 回答