我在新的 MVC4 站点上安装了 Mini-Profiler,并注意到某些功能的等待时间很长Find: DisplayTemplates
包括字符串和日期时间。下面是一个例子。在另一个问题中,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
有什么想法吗?
Edit
我设置了 4 个区域,所以我认为它正在遍历所有目录寻找匹配项,所以我删除了其中 2 个区域并具有相同的行为。
我有完全相同的问题......经过一番搜索后我发现我正在使用:
@DisplayFor(x => x.StringProperty);
经过思考,并通过自己制作一些模板了解了所有 DisplayFor/EditorFor 方法是如何工作的,这没有任何意义。
(关于 DisplayFor/EditorFor 工作原理的一些解释)
当使用 DisplayFor/Editor for 时,MVC 获取type
对象,然后搜索Views/ControllerName/DisplayTemplates
与该类型同名的视图的目录,在本例中,它正在搜索Views/ControllerName/DisplayTemplates/String.cshtml
。因为它不存在,所以它在Shared/DisplayTemplates
同样,views 目录将不存在。
(接下来的一点是猜测)
我认为,由于它找不到相关的显示/编辑器模板,因此它会在对象上执行 ToString() 作为故障转移。
由于无论如何您都只显示 String 类型,因此不使用DisplayFor(x => StringProperty)
只需使用@Model.StringProperty
,这不会导致 MVC 搜索DisplayTemplate
,然后将其渲染为字符串,无论如何它都会这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)