我在处理存储在缓存中的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