C# 最小化SqlDataReader循环上的表锁定?
我有以下场景(删除异常处理,简化代码): 因此,查询涉及的表(在过度拥挤的SQLServer2000上运行)具有几个小时或更长时间的共享锁,这取决于记录的数量 这些锁有时会影响查询此数据库的其他应用程序,因此要求我尽快删除这些锁 所以,除了显而易见的C# 最小化SqlDataReader循环上的表锁定?,c#,.net,sql-server,dapper,C#,.net,Sql Server,Dapper,我有以下场景(删除异常处理,简化代码): 因此,查询涉及的表(在过度拥挤的SQLServer2000上运行)具有几个小时或更长时间的共享锁,这取决于记录的数量 这些锁有时会影响查询此数据库的其他应用程序,因此要求我尽快删除这些锁 所以,除了显而易见的 List<Record> rList = new List<Record>(); SqlDataReader rdr = executeQuery(query); while (rdr.Read()) { //Ther
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);
}
List rList=new List();
SqlDataReader rdr=executeQuery(查询);
while(rdr.Read()){
//有数千条记录,所以这种情况发生了数千次
storeRecord(rList,rdr);//需要毫秒
}
rdr.Close();
foreach(在rList中记录r){
handleRecord(r);
}
这将限制我可以在机器内存中处理的记录数量,还有其他选择吗
(这个应用程序我正在慢慢地转到Dapper.NET,因此它已经是代码其他部分的依赖项,以防Dapper中有什么东西可以帮助解决这个问题。)将尝试我的评论作为答案,因为最近没有评论
选择一个临时表格。并对你的锁进行全面检查。也许是一些排锁。确保以相同的顺序更新表。HandlerRecord是什么样子的?在中,将尝试我的评论作为答案,因为最近没有评论
选择一个临时表格。并对你的锁进行全面检查。也许是一些排锁。确保以相同的顺序更新表。HandlerRecord是什么样子的?在中,这是一个老话题,但我有时会使用以下技巧:
通过这种方式,您可以读取和处理成批数据。这是一个老话题,但我有时会使用以下技巧:
通过这种方式,您可以读取和处理成批数据。如果使用sql server查询提示执行查询,则不锁定?我希望数据尽可能是最新的,我理解在某些情况下使用提示可能会改变这一点。但是rList方法也会有过时的数据。@bum By-update我的意思是最新的“我希望数据100%有效“使用NOLOCK,我可以读取未提交的事务。事实证明,我不仅可以读取未提交的事务,还可以获取重复的行,甚至可以消除查询错误。如果查询是使用sql server查询提示no lock执行的?我希望数据尽可能是最新的,我知道在某些情况下使用提示可能会改变这一点。但是rList方法也会有过时的数据。@bum By-update我的意思是“我希望数据100%有效”使用NOLOCK,我可以读取未提交的事务,结果证明,我不仅可以读取未提交的事务,还可以获取重复的行,甚至可以消除查询错误。
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);
}