2016-03-28 44 views
0

从控制器返回ActionResult时执行视图吗?或者是仅仅是对稍后执行的某些内容的引用?是否从控制器动作返回一个ActionResult实际执行该视图?

我在缓冲区操作中放置了一些ActionResult缓存。考虑这一点,一个控制器动作中:

if(isCached(someKey)) 
{ 
    return cachedActionResult; 
} 
else 
{ 
    var model = new ALazyLoadedModel(); 
    return View(model); 
} 

所以,在第一次执行之后,整个ActionResult对象从缓存返回。 (这个模型有一堆懒惰加载的属性,所以执行的“痛苦”是这些属性被从视图中调用出来,因此,模型的执行和视图的执行基本上是相同的。)

然而,性能上的提升并不是我所希望的,当我在模型的创建和视图的返回时放置了一些时间,它显然在几分之一毫秒内执行 - Stopwatch表示它只需要0.0958毫秒的返回(所以,大约1/100000秒)。根据模型/视图的作用,我觉得这有点难以置信。

这就是我怀疑 - 在ActionView的回报实际上并不执行认为,它只是初始化视图,并返回对它的引用,这是以后执行。如果这是真的,那么显然这个缓存策略根本无济于事。

我怀疑对不对?还是return View()确实执行视图,我的视图执行显然比我想象的要快得多?

+0

您的案例中'cachedActionResult'只包含*意图*来返回一个视图,而不是实际的渲染视图。您需要输出缓存来收集整个响应。 – haim770

回答

1

是的,ASP.NET MVC的核心思想是控制器方法的结果是执行某些内容的意图,而不是执行结果。

return View(model)字面意思是告诉框架,请查找与此被调用方法对应的视图,并使用此模型进行呈现。所有这些工作都会在控制器的方法之外,在调用它的代码中发生。

相关问题