我在處理存儲在緩存中的DataTable時看到了奇怪的行爲。雖然它可能是設計。對緩存項目(DataTable)的.NET引用
該場景很簡單。我將數據庫查詢的結果存儲在DataTable中並將其放入該緩存中。在完成數據庫查詢或從緩存中獲取結果後,我需要對其進行一些後處理(如添加列或排序)。似乎操作正在發生在緩存中的項目。所以當我從緩存中獲取物品時,它必須抓住對它的引用?
代碼
string CacheKey = "SearchData";
DataTable CachedResults = null;
object CachedObject = Cache[CacheKey];
if (CachedObject is DataTable) { CachedResults = (DataTable)CachedObject; }
if (CachedResults == null)
{
CachedResults = new DataTable();
// Query the database and fill CachedResults
if (Cache[CacheKey] == null)
{
Cache.Add(CacheKey, CachedResults, null, DateTime.Now.AddMinutes(30), Cache.NoSlidingExpiration, CacheItemPriority.Low, null);
}
}
CachedResults.Columns.Add("NewColumn");
我想我的問題是,是CachedResults只是緩存項的參考?如果我想避免,我需要在DataTable上做一個副本?
非常感謝, Maleks
您已經正確回答您自己的問題。是的,CacheResults只是對緩存項目的引用,而且您確實需要製作副本(DataTable.Copy)。 – Joe