我使用的是SQL Compact3.5 SP2。我的应用程序是多线程的,但它不跨线程共享连接。相反,我使用自定义对象池来确保每个线程都有自己的连接。也就是说,连接可能会在不同的时间在不同的线程上被重用……换句话说,我假设这些连接没有线程亲和性。另外,我不确定这是否重要,但我使用的是.NET 3.5 SP1中的实体框架。
无论如何,当我遇到高负载的情况(8+线程)时,我会得到锁超时异常(不管超时设置的长度如何),异常总是说锁在__SysObjects表上。
我没有做任何DDL,所以我不明白为什么我会在那个表上得到锁定超时。想法?
发布于 2011-01-19 23:17:20
我在一定程度上解决了这个问题,方法是确保我的连接在每次使用后都是关闭的(而不是共享打开的连接),但是如果我让代码长时间运行,我就会得到OutOfMemoryException和AccessViolation异常。
这看起来像是SqlCeConnection类具有某种线程关联依赖关系。或者,或者它有某种类型的内存泄漏。
无论如何,我已经放弃了对这些对象进行池化的尝试。
编辑:这实际上是一个由累积更新2发布的地址。自从更新我对新库的引用以来,我还没有看到这个问题。请参阅:http://support.microsoft.com/kb/983516
https://stackoverflow.com/questions/4720253
复制相似问题