2016-03-28 41 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)字面意思是告訴框架,請查找與此被調用方法對應的視圖,並使用此模型進行呈現。所有這些工作都會在控制器的方法之外,在調用它的代碼中發生。

相關問題