我在新的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个区域并具有相同的行为。
答案 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的脚本捆绑中。
我删除了捆绑包,一切都很好。
请参阅以下相关问题: