我在ASP.NET Web Service项目中有一个数据表,这个数据表有大约500K条记录,包含39列,并且存在缓存中。 一分钟后,一个后台线程会访问数据库并从中获取更新的记录,我想将这些记录更新到缓存的数据表中,我使用以下方法,但是它需要相当长的时间才能完成:
foreach (DataRow dRNew in dtNew.Rows)
{
DataRow row = dtOriginal.Select("ID=" + dRNew["ID"]).First();
row["Column1"] = dRNew["Column1"];
row["Column2"] = dRNew["Column2"];
row["Column3"] = dRNew["Column3"];
}
我已经替换了以下行:
DataRow row = dtOriginal.Select("ID=" + dRNew["ID"]).First();
使用
DataRow row = dtOriginal.AsEnumerable().Where(r => ((Int64)r["ID"]).Equals(dRNew["ID"])).First();
但是徒劳无功,在我的笔记本上需要大约5分钟。
请问有人可以指导我到底哪里做错了吗?使用哪种方法可以更高效地完成,我不确定是否可以使用Dataset.Merge
或其他方法。
Dictionary<TKey, TValue>
,其中TValue
可以是您的PK类型,而TValue
则是其他38列)。顺便说一句:如果你认为增加RAM会有帮助,那就去做吧! - user57508