Обнаружение незамкнутых соединений с SQL - PullRequest
3 голосов
/ 12 апреля 2010

Я унаследовал очень большой проект в ASP.net, SQL 2005 и обнаружил, что некоторые SQL-соединения не закрыты - что плохо. Не проходя через каждую строку кода, есть ли способ обнаружить, если соединения не закрыты? Счетчик производительности? как продолжение - как SQL восстанавливает незакрытые соединения. Я использую строку пула без пула.

Ответы [ 2 ]

4 голосов
/ 12 апреля 2010
  • Sql не восстанавливает их. Они открыты до тех пор, пока администратор не закроет их принудительно или, что ж, со стороны клиента.
  • Что было бы мусором, собирающим объекты соединения.

Возможно, вам лучше всего использовать профилировщик памяти - попробуйте выяснить, откуда происходят (потерянные и неиспользуемые) соединения.

Выглядит для меня действительно дерьмовым кодом - потому что во всех приложениях asp.net, которые я когда-либо писал, соединения обрабатывались только в одной точке кода. Кажется, кто-то распространял это повсюду здесь.

Может быть одна подсказка: посмотрите на SQL из этих устаревших соединений. Вы должны быть в состоянии получить последний SQL-оператор, который может дать вам подсказку о том, откуда они берутся.

3 голосов
/ 12 апреля 2010

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

//matches any constructor call to SqlConnection    
new:Zs*(System.)*(Data.)*(SqlClient.)*SqlConnection(\([0-9a-zA-Z]*\))

Это поможет вам найти инициализации вашего соединения, что, вероятно, поможет ускорить процесс. Я думаю, что TomTom прав в том, что вы, вероятно, имеете дело с дерьмовым кодом, который имеет высокую цикломатическую сложность, поэтому без визуального осмотра вы, вероятно, не найдете каждый случай. Будьте внимательны, чтобы проверить, передаются ли соединения. Вероятно, у вас есть болезненный рефакторинг, но я обещаю, что он окупится в пики.

Удачи, надеюсь, это поможет!

...