Каковы хорошие способы отладки тайм-аутов? (С #) - PullRequest
4 голосов
/ 11 сентября 2009

Я создаю сайт, который работает нормально в течение нескольких часов, но затем время ожидания вызовов * .asmx и * .ashx истекает.

Исключение составляет: «Время ожидания истекло. Период ожидания истек до получения соединения из пула. Это могло произойти из-за того, что все соединения в пуле использовались и был достигнут максимальный размер пула».

Я использую SubSonic в качестве ORM.

Я подозреваю, что проблема связана с запланированной задачей, которая запускается каждые несколько минут и попадает в базу данных. Когда я смотрю в «Текущая активность» SQL Server 2000, я вижу:

  • 100 процессов со статусом «спящий»
  • 100 замков

100 процессов происходят из приложения ".Net SqlClient Data Provider", а команда "AWAITING COMMAND".

Так что я предполагаю, что это проблема. , но как мне устранить это? Похоже ли это на состояние тупика в БД? Как только я

c: \> iisrestart

, все хорошо (какое-то время).

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

Michael

Ответы [ 3 ]

6 голосов
/ 11 сентября 2009

Это может быть дубликат этой проблемы - Правильно ли работает пул соединений в Subsonic?

Если вы загружаете объекты с Load () вместо LoadAndCloseReader (), каждое соединение останется открытым, и в конечном итоге вы исчерпаете пул соединений.

6 голосов
/ 11 сентября 2009

Когда вы вызываете Load () для коллекции, она оставляет Reader открытым - убедитесь, что вы вызываете LoadAndCloseReader (), если хотите, чтобы читатель закрылся - или используете блок using.

Также полезно иметь некоторый исходный код.

0 голосов
/ 11 сентября 2009

Я ничего не знаю о Subsonic, но, может быть, вы пропускаете «контексты» базы данных? Я бы проверил, что любой ресурс базы данных удаляется после того, как вы закончите с ним ...

...