2012-08-23 165 views
2

我有一個控制器動作,可以動態呈現給定幾個輸入參數的圖形。由於它在圖形渲染時略微明顯,我使用輸出緩存來避免重新渲染。控制器直接調用ASP.Net MVC OutputCache

有幾十個輸入參數組合非常頻繁地使用。我認爲這是一個好主意,溫暖緩存,以便第一個訪問者使用給定的那些組合不會遇到延遲。

爲此,我直接調用從的Application_Start控制器()是這樣的:

UtilController uc = new UtilController(); 
uc.GenerateImage(p1, p2, p3); 

通過設置斷點,我看到的是,控制器動作被調用並生成圖像。但是,瀏覽器請求圖像的第一個(也是唯一的一次)時間,它會再次生成。爲了進行此測試,瀏覽器配置爲不緩存任何內容,並仔細比較用於調用控制器操作的參數。

當直接調用控制器動作時,輸出緩存是否被調用?預熱緩存有沒有更好的方法(希望是一個獨立的Web項目)?

回答

2

是否在直接調用控制器操作時不調用輸出緩存?

它不會被調用,因爲您沒有經歷觸發它的HTTP請求/響應循環。你直接調用恰好是你的行爲的方法。

預熱緩存有沒有更好的方法(希望網頁 項目自成一體)?

您可以使用WebClient將HTTP請求發送到給定的地址。只有當你配置緩存存儲在服務器上時,這纔會起作用。如果您將位置配置爲下游或客戶端,則不會有任何用處。

+0

緩存URL是否敏感?換句話說,我可以通過http:// localhost訪問操作,還是必須知道外部URL? –

+0

AFAIK網址在Windows下不區分大小寫。 –

+0

我的意思是,如果網站部署在'http:// somedomain.com',我可以使用WebClient加載要從'http:// localhost'緩存的資源嗎? –