【張逸】ASP.NET:效能與快取[續]

iDotNetSpace發表於2008-06-12
通過快取的設定來提高ASP.NET的效能。設定緩衝的方法是: 
【張逸】ASP.NET:效能與快取[續]@OutputCache%> 【張逸】ASP.NET:效能與快取[續]


它主要有兩個引數:DurationVaryByParam


Duration:設定頁面或控制元件進行快取的時間(單位:秒)。例如我要設定快取為60秒內有效,我就可以這樣設定:

【張逸】ASP.NET:效能與快取[續]@ OutputCache Duration=60“ VaryByParam=“none“ %>


設定Cache有什麼好處呢?舉個簡單的例子,你想通過網頁查詢某些資料,而這些資料並非實時變化,或者變化的時間是有期限的,例如查詢氣溫。我們沒有必要了解每秒每刻的氣溫,只需要知道當天的氣溫就OK了。那麼我在午時一點鐘和在一點過一分鐘的時候去查詢的氣溫應該完全一致。如果不設定快取,哪怕你查詢的資料完全一致,ASP.NET也會根據你的需要重複查詢兩次,這就增加了不必要的開銷。

如果設定了快取,只要沒有過Duration所設定的期限,那麼ASP.NET就直接在快取裡查詢即可。

通過ACT(Application Center Test)的測試,發現設定快取後執行的效能比未設定快取時的效能足足提高了三倍多。


可能大家已經看到了在上面的程式碼中,我們將”VaryByParam“設定為none,這個引數又有什麼用了。還是舉剛才那個例子。我們通過城市名來查詢當地的氣溫。例如輸入“beijing”,獲得的氣溫是27。獲得的值會放入到快取中。然而我們在60秒內,接著輸入“shanghai”,因為設定快取的原因,獲取的並非shanghai的氣溫,而是之前放入到快取中的beijing的氣溫27。

解決的辦法就是使用VaryByParam。通過它可以根據設定的引數值建立不同的快取。如果我們輸入的城市名是在一個TextBox中,且該控制元件的ID為”txtCity”,那麼我們可以將其設定到VaryByParam中:

【張逸】ASP.NET:效能與快取[續]@ OutputCache Duration=60” VaryByParam=”txtCity” %>

此時,當我們輸入“beijing”時,儲存到快取的是beijing的值。如果再60秒內輸入其它城市,例如“shanghai”,它會在快取中查詢是否有引數值為“shanghai”的快取值,如果沒有去重新獲得,否則讀出相應的值。這樣就可以避免上面所說的錯誤結果。

上面所述的緩衝實際上是頁面緩衝,也就是說,這個緩衝是針對整個頁面而言的。在ASP.NET中還有一種稱為“片斷緩衝”。緩衝的作用域是在UserControl中。

在ASP.NET中,提供了UserControl這種使用者控制元件的功能。一個頁面可以通過多個UserControl來組成。如果只需要在某個或某幾個UserControl裡設定快取。那麼可以在UserControl的Html程式碼中新增語句:

【張逸】ASP.NET:效能與快取[續]@ OutputCache Duration=60“ % 〉

 

當然在UserControl中也仍然存在快取值重複的問題。這個時候可以使用VaryByControl引數來進行設定。這個設定相當於將快取按照UserControl進行分割槽。方法與設定VaryByParam相似。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-343462/,如需轉載,請註明出處,否則將追究法律責任。

相關文章