Ошибка пула соединений LINQ to SQL - PullRequest
3 голосов
/ 28 апреля 2010

В нашем проекте я использовал LINQ to SQL для каждого вида взаимодействия с базой данных.Теперь из того, что я знаю, когда я создаю и использую объект DataContext: он открывает соединение, создает транзакцию, выполняет запрос и закрывает соединение.

Время от времени мы получаем ошибку пула соединений в наших службах и на Сервере.

"Период ожидания истек до получения соединения из пула. Это могло произойти, потому что все соединения в пулебыли использованы и максимальный размер пула был достигнут. "

Есть идеи?Я полностью здесь?Связано ли это с самим SQL Server?

Мы используем LINQ, .Net 3.5 и Sql Server 2008

ПРИМЕЧАНИЕ. НИКАКОЙ ДАННЫЙ ДАТЧИК НЕ ИСПОЛЬЗУЕТСЯ НИКОГДА В СИСТЕМЕ.

1 Ответ

6 голосов
/ 28 апреля 2010

См. Здесь:

Когда я должен избавиться от контекста данных

Я цитирую Джона Скита, цитирующего кого-то еще здесь, но это было для меня неожиданностьютакже, так как мы столкнулись с подобной проблемой.

Логику, которая автоматически закрывает соединение DataContext, можно обмануть, оставив соединение открытым.DataContext опирается на код приложения, перечисляющий все результаты запроса, поскольку при достижении конца набора результатов соединение закрывается.Если приложение использует метод MoveNext IEnumerable вместо оператора foreach в C # или VB, вы можете преждевременно завершить перечисление.Если ваше приложение испытывает проблемы с соединениями, которые не закрываются, и вы подозреваете, что автоматическое закрытие не работает, вы можете использовать шаблон Dispose в качестве обходного пути.

По сути, механизм закрытия самого текстового текста не работаетпуленепробиваемый.С тех пор я закрыл его вручную, что решило нашу проблему.

...