C# 在c中,哪种隔离级别可以更好地避免独占锁#

C# 在c中,哪种隔离级别可以更好地避免独占锁#,c#,sql-server-2012,C#,Sql Server 2012,在我的c#application everywhere中,为事务将隔离级别设置为“读取已提交”。我知道这是为了防止数据库的脏读 但在某个时间点上,若在数据库中执行长时间运行的查询,则需要独占锁,这需要时间来完成 e、 假设我编写了一个查询,在sql数据库中执行该查询需要时间。另一方面,有人从GUI执行一些操作,这些操作通过应用程序中的事务(读提交)完成。所以,在这一点上,我猜它需要独占锁,然后等待sql查询执行完成,而sql查询仍在运行。然后给出超时错误 有人能告诉我应该在我的应用程序中使用哪种

在我的c#application everywhere中,为事务将隔离级别设置为“读取已提交”。我知道这是为了防止数据库的脏读

但在某个时间点上,若在数据库中执行长时间运行的查询,则需要独占锁,这需要时间来完成

e、 假设我编写了一个查询,在sql数据库中执行该查询需要时间。另一方面,有人从GUI执行一些操作,这些操作通过应用程序中的事务(读提交)完成。所以,在这一点上,我猜它需要独占锁,然后等待sql查询执行完成,而sql查询仍在运行。然后给出超时错误

有人能告诉我应该在我的应用程序中使用哪种隔离级别来处理事务以避免锁定吗?并且可以在事务中执行或运行insert、update和delete,而无需考虑在sql server实例中执行的长时间运行的查询

非常感谢您的建议。谢谢


BR

“读取未提交”不会接受任何读取锁定,但允许脏读取。他是你的朋友。不要盲目地应用它,因为它以锁定换取更新冲突,而更新冲突需要显式处理。但对于那些更新不会发生冲突且不应阻止读卡器的应用程序来说,这已接近理想状态。在许多情况下,它肯定比
读取未提交的
好,因为它保持了数据的一致性(您读取的数据可能是旧的,但不会不一致或不完整,在
未提交的
下很可能会发生这种情况)。如果我使用快照隔离,那么我将如何明确地处理更新冲突?如果您关心的只是读卡器不阻止写入程序,请不要在修改语句中使用快照隔离(只需将其保留为锁定),并且仅对
SELECT
语句使用快照隔离(这些语句不能生成冲突)。如果在整个过程中应用快照隔离,则需要准备好处理指示更新冲突的
SqlExceptions
,并实施重试策略。通常情况下,锁是尽可能细粒度的,这通常意味着行锁的使用时间尽可能短。对于快照隔离,肯定不是,因为冲突检测是基于行版本(实际修改)进行的。