2010-09-11 98 views
2

我正在ASP.NET 1.1頁面的C#中創建一個搜索結果頁面。在我的數據層中,我有一個存儲普通舊ADO.NET存儲過程調用結果的DataSet。 DataSet有兩個DataTable,我使用DataVIew來過濾和排序列。 我只想填充一次數據集,然後處理DataTable和派生的DataView,直到頁面被卸載。 如何最好的將DataSet緩存在我的DAL中,以便它只填充PageLoad?我把它放在一個Cache對象,一個靜態成員變量,一個屬性......我沒有任何花哨的實體模型或ORM,這是.NET 1.1。提前致謝。如何緩存數據集以停止往返數據庫?

回答

4

您的DAL是否會被其他應用程序使用?如果沒有,那麼您可以根據存儲需要哪些功能來嵌入DataSetCacheSession中的高速緩存。

Session將特定於用戶,並在用戶會話過期時得到清理,這意味着數據可能比需要的時間長很多。 More info on Session

Cache是不錯的,因爲它會自動失效(使用滑動過期如果搜索數據不會經常更改),你可以保存搜索標準與它,以便其他用戶可以利用搜索以及這將節省您的來電可能由多個用戶訪問數據庫。多位用戶能夠訪問這些數據是使用Session的一大優勢。 More info on Cache

如果您打算在其他apap中使用您的DAL,您可能希望應用程序自行執行緩存。

你只需要像一個包裝:

// Consider this psuedo code for using Cache 
public DataSet GetMySearchData(string search) 
{ 
    // if it is in my cache already (notice search criteria is the cache key) 
    string cacheKey = "Search " + search; 
    if (Cache[cacheKey] != null) 
    { 
     return (DataSet)(Cache[cacheKey]); 
    } 
    else 
    { 
     DataSet result = yourDAL.DoSearch(search); 
     Cache[cacheKey].Insert(result); // There are more params needed here... 
     return result; 
    } 
} 
+0

我不認爲我會再次使用此DAL,但我想盡量減少往返數據庫的往返行程,並使搜索結果適用於多個用戶。原始數據集對於所有用戶都是通用的,儘管他們可以通過DataView對其進行過濾。謝謝您的幫助。 – Brendan 2010-09-13 14:06:16

1

有一些與.net 1.1協同工作的ORM,但是如果你不想使用它們,我會建議在緩存中填充一些東西,以便在需要時可以過期並重新獲取數據。您也可以將它放入會話中(如果數據是用戶特定的)或應用程序(如果不是)對象。

+0

出於興趣David你會推薦什麼ORM? – Brendan 2010-09-13 19:51:17

+0

NHibernate 1.0寫入.net 1.1 – BlackICE 2010-09-14 16:07:37

0

如果這是每個用戶的數據不緩存大量數據付諸會議或類似的,你都嚴重製約着你的網站的能力規模。考慮到添加更多用戶時內存中信息量的增長情況,以及當您需要使用多個站點服務器時會發生什麼情況。

而是修改過程,以便您只能檢索需要顯示的數據頁面。

如果這是用於所有用戶的數據,請將其緩存。你可以使用asp.net緩存。