我在新的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个区域,并且具有相同的行为。
最佳答案
我有完全相同的问题...经过一番搜索后,我发现我在使用:@DisplayFor(x => x.StringProperty);
经过仔细考虑,并亲自制作了一些模板,找出了所有DisplayFor/EditorFor方法的工作方式,这没有任何意义。
(有关DisplayFor/EditorFor的工作原理的一些解释)
当使用DisplayFor/Editor时,MVC获取对象的type
,然后在Views/ControllerName/DisplayTemplates
目录中搜索与该类型同名的 View ,在这种情况下,它将搜索Views/ControllerName/DisplayTemplates/String.cshtml
。由于它不存在,因此在Shared/DisplayTemplates
views目录中也做了相同的操作,同样,它也不存在。
(下一点是猜测)
我认为由于找不到相关的Display/Editor模板,因此它将在对象上执行ToString(),作为故障转移。
由于您仍然只显示String类型,因此不使用DisplayFor(x => StringProperty)
而只使用@Model.StringProperty
是有道理的,这不会导致MVC搜索DisplayTemplate
,而只是将其呈现为字符串,无论如何都会这样做。
关于asp.net-mvc - 查找: DisplayTemplates Speed,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11758338/