在我们的应用程序中,我们偶尔会遇到 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