【发布时间】:2016-03-29 00:04:23
【问题描述】:
从控制器返回ActionResult 时视图是否执行?还是ActionResult 只是对稍后执行的内容的引用?
我在我的控制器操作中的一些ActionResult 返回周围放置了缓存。考虑一下,在控制器动作中:
if(isCached(someKey))
{
return cachedActionResult;
}
else
{
var model = new ALazyLoadedModel();
return View(model);
}
因此,在第一次执行之后,整个ActionResult 对象将从缓存中返回。 (那个模型有一堆延迟加载的属性,所以执行的“痛苦”是当这些属性被从视图中调用时。因此,模型的执行和视图的执行基本上是一回事。)
然而,性能提升并不是我所希望的,当我在模型的创建和视图的返回上安排一些时间时,它显然是在几分之一毫秒内执行的——Stopwatch 说返回只需要 0.0958 毫秒(因此,大约是 1/100,000 秒)。根据该模型/视图的作用,我觉得这有点难以置信。
这就是我的怀疑——ActionView 的返回实际上并没有执行视图,它只是初始化视图并返回对它的引用,稍后执行。如果这是真的,那么显然这种缓存策略根本没有帮助。
我的怀疑是对的吗?还是return View() 确实执行了视图,而我的视图执行显然比我想象的要快很多?
【问题讨论】:
-
cachedActionResult在您的情况下仅包含返回视图的 intention 视图,而不是实际呈现的视图。您需要输出缓存来收集整个响应。
标签: asp.net-mvc