从控制器返回ActionResult
时是否执行了视图?或者ActionResult
只是对稍后执行的内容的引用?
我在控制器操作中的一些ActionResult
返回周围放置了缓存。在控制器操作中考虑这一点:
if(isCached(someKey))
{
return cachedActionResult;
}
else
{
var model = new ALazyLoadedModel();
return View(model);
}
因此,在第一次执行之后,从缓存返回整个ActionResult
对象。 (该模型具有一堆延迟加载的属性,因此执行的“痛苦”是当从视图中调用这些属性时。因此,模型的执行和视图的执行基本相同。)
然而,性能提升并非我所希望的,当我在模型的创建和视图的返回周围放置一些时间时,它显然在几分之一毫秒内执行 - {{1} }说它返回只需0.0958毫秒(因此,大约是1/100000秒)。基于该模型/视图的作用,我发现这有点难以置信。
这是我怀疑的 - Stopwatch
的返回实际上并不执行视图,它只是初始化视图并返回对它的引用,稍后执行。如果这是真的,那么这个缓存策略显然无济于事。
我怀疑对吗?或者ActionView
确实执行了视图,我的视图执行显然比我想象的快得多?
答案 0 :(得分:1)
是的,ASP.NET MVC的核心思想是控制器方法的结果是执行某些操作的意图,而不是执行的结果。
return View(model)
字面意思是告诉框架,请查看与此方法相对应的视图,并使用此模型进行渲染。所有这些工作都将在控制器的方法之外,在调用它的代码中进行。