我有以下的情况下(异常处理去除,代码简化):最小化SqlDataReader循环上的表锁定?
SqlDataReader rdr = executeQuery(query);
while (rdr.Read()) {
//There are thousands of records, so this happens thousands of times
handleRecord(rdr); //Takes a couple of seconds
}
rdr.Close();
所以,表中查询涉及已共享锁了几个小时或更长时间(一个拥挤的SQL Server 2000上运行)取决于记录的数量。
这些锁有时会影响查询此数据库的其他应用程序,所以我被要求尽快删除锁。
因此,短期的明显
List<Record> rList = new List<Record>();
SqlDataReader rdr = executeQuery(query);
while (rdr.Read()) {
//There are thousands of records, so this happens thousands of times
storeRecord(rList,rdr); //Takes milliseconds
}
rdr.Close();
foreach (Record r in rList) {
handleRecord(r);
}
,后者使极限上的记录,我可以对机器的内存处理量,还有没有其他的选择吗?
(这个程序,我慢慢移动到Dapper.NET,所以它已经为代码的其他部分的依赖性,如果有一个在小巧玲珑的东西,可能有这种情况有所帮助。)
如果查询是用sql server查询提示no-lock执行的? –
我希望数据尽可能最新,我知道在某些情况下使用提示可能会改变这种情况。 –
但rList方法也将有陈旧的数据。 – Paparazzi