1

在我们的应用程序中,我们偶尔会遇到 SQL CE 抛出的 LockTimeoutExceptions。我们最近升级到 3.5 SP 1,其中一些似乎已经消失,但我们仍然偶尔会看到它们。我确定这是我们代码中的一个错误(它是多线程的),但我无法准确地确定它。有没有人有任何好的技术来调试这个问题?像这样的异常日志(这些异常从来没有堆栈跟踪):

SQL Server Compact 在等待锁定时超时。设备的默认锁定时间为 2000 毫秒,台式机的默认锁定时间为 5000 毫秒。可以使用 ssce: default lock timeout 属性在连接字符串中增加默认锁定超时。[会话 id = 6,线程 id = 7856,进程 id = 10116,表名 = 产品,冲突类型 = s 锁 (x 块),资源 = DDL]

我们的数据库读取量很大,但很少写入,而且我认为我已经在需要的地方得到了保护。

编辑:SQL CE 已经自动使用 NOLOCK http://msdn.microsoft.com/en-us/library/ms172398(sql.90).aspx

4

2 回答 2

1

我刚刚意识到 3.5 SP1 在异常中包含了让我确定的新信息。

SQL Server Compact 在等待锁定时超时。设备的默认锁定时间为 2000 毫秒,台式机的默认锁定时间为 5000 毫秒。可以使用 ssce: default lock timeout 属性在连接字符串中增加默认锁定超时。[ 会话 id = 6,线程 id = 7856,进程 id = 10116,表名 = 产品,冲突类型 = s 锁(x 块),资源 = DDL ]

我能够确定它是在尝试删除必须与其打开连接的现有表时发生的。

于 2008-09-18T18:31:15.950 回答
1

万一其他人看到这个页面,我发现了另一个可能发生这种情况的原因。我创建了一个 SqlCeTransaction 来包装各种语句,但我不小心没有在其中一个语句上使用该事务。这导致了我的锁定超时消息。

于 2010-04-25T22:02:05.147 回答