Тайм-аут блокировки SQL Compact для __SysObjects - PullRequest
0 голосов
/ 18 января 2011

Я использую SQL Compact 3.5 SP2.Мое приложение многопоточное, но оно не разделяет соединения между потоками.Вместо этого я использую пользовательский пул объектов, чтобы гарантировать, что каждый поток получает свое собственное соединение.Тем не менее, возможно, что соединение может быть повторно использовано в разных потоках в разное время ... другими словами, я предполагаю, что соединения не имеют привязки к потокам.Кроме того, не уверен, что это имеет значение, но я использую Entity Framework в .NET 3.5 SP1.

В любом случае, когда у меня возникают ситуации с высокой нагрузкой (8+ потоков), я получаю исключения тайм-аута блокировки(независимо от длины установки тайм-аута), а исключение всегда говорит, что блокировка была в таблице __SysObjects.

Я не делаю никаких DDL, поэтому не понимаю, почему я получу тайм-ауты блокировкина этом столе.Идеи?

1 Ответ

0 голосов
/ 19 января 2011

Я несколько решил эту проблему, убедившись, что мои соединения закрывались после каждого использования (в отличие от объединения открытых соединений), но если я позволил коду работать долго, я начал получать исключения OutOfMemoryException и AccessViolation.

Это пахнет, как будто класс SqlCeConnection имеет некоторую зависимость от сродства потока.Либо это, либо он имеет какую-то утечку памяти.

Во всяком случае, я перестал пытаться объединять эти объекты.

РЕДАКТИРОВАТЬ: Это на самом деле, кажется, выпущенaddress by Cummulative Update 2. После обновления моих ссылок на новые библиотеки я не видел этой проблемы.Смотри: http://support.microsoft.com/kb/983516

...