我有以下场景(删除了异常处理,简化了代码):
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,所以它已经是代码其他部分的依赖项,以防 Dapper 中的某些东西可以帮助解决这种情况。)