2010-09-16 47 views
0

我目前有一個名爲MyGridview的控件繼承Gridview。它內部有一個用於自定義分頁選項的分頁模板,而且我希望緩存初始數據源以獲得更好的性能。ASP.net:Gridview數據源緩存問題

我很長一段時間沒有這樣做過,所以現在可能有更新的框架有不同的解決方案。之前,我只是使用了一個名爲GridView的命名的Cache對象。雖然我無法通過應用程序使用相同的gridview名稱。

是否有一種最佳方式來讓緩存對象或控件中的會話等其他對象存儲用於分頁和排序的獨特數據集?

+0

我們談論的數據源有多大? 10行,100行,1000000行? – CodingGorilla 2010-09-16 15:14:01

+0

不是很大,但我想我的擔心是覆蓋緩存或session'd對象。 – jlrolin 2010-09-16 15:15:22

+0

我問大小的原因是你可能會考慮將數據放在視圖狀態,而不是服務器端緩存(除非存在安全問題)。 – CodingGorilla 2010-09-16 17:54:53

回答

0

由於您正在談論自定義控件,因此我建議將其抽象化,以便使用該應用程序的任何人都可以定義自己的策略。定義一個接口:

public interface IGridCaching { 
    object LoadCache(); 
    void SaveCache(object data); 
} 

創建一個默認實現DefaultGridCaching並實現你想要的解決方案,並將其作爲網格的屬性:

public IGridCaching Caching 
{ 
    get { return this._caching ?? new DefaultGridCaching(); } 
    set { this._caching = value; } 
} 

然後它變成定製。沒有一個巨大的變化;緩存仍然是一個不錯的選擇。使用企業庫緩存塊是另一種緩存解決方案。但這樣,緩存是可定製的。

HTH。

+0

讓我問這個......假設我這樣做,緩存密鑰最終在兩個數據源中是相同的。數據將被覆蓋在緩存中,這就是我想要避免的。有沒有解決方案可以確保鏈接到當前控件實例的唯一鍵? – jlrolin 2010-09-16 15:37:13

+0

除了網格視圖ID之外,將用戶標識或當前會話標識附加到緩存鍵可以解決此問題。這通常是用於緩存的。 – 2010-09-16 17:02:44