утечка памяти
хорошая практика использвать using() {} конструкцию.
код слишком длинный: "Вы ввели слишком длинный текст (20581 символов). Пожалуйста, сократите его до 10000 символов."
Соединения аккуратно закрываю, можно по-подробнее про "освобождаешь ли ресурсы, может у тебя транзакции не закрыты....." - я думал сборщик мусора уничтожает весь "мусор"
Неправильно, сборщик мусора лишь уничтожает управляемые объекты. А уничтожением неуправляемых данных, таких как соединения с БД, файловые потоки, unmanaged-буфферы, транзакции, должен заниматься сам программист (об этом чёрным по белому записано в CLI Specification, стандарт ECMA 335, часть 1 - Арихитектура). Такие вещи освобождаются системой, только если приложение завершило работу. Во время работы проги даже если GC зарезал экземпляр SqlConnection, то это совершенно не означает, что соединение разрушено. Конечно, нужно использовать using или вызывать Dispose для таких объектов обязательно. Ещё очень эффективно использовать при тестировании своего приложения хороший профайлер и отладчик, тогда удасться найти участки кода, которые вызывают утечку памяти. И ещё, напоследок, попробуй периодически вызывать GC.Collect(). Может поможет.