Установка TCP-соединения между вашим веб-приложением и SQL Server может быть дорогостоящей операцией. Пул соединений позволяет повторно использовать соединения с базой данных для последующих запросов данных. Вместо того, чтобы устанавливать новое TCP-соединение для каждого запроса, новое соединение устанавливается, только если оно не доступно в пуле соединений. Когда соединение закрыто, оно возвращается в пул, где оно остается подключенным к базе данных, а не полностью разрывает это TCP-соединение.
Всегда закрывайте свои соединения, когда закончите с ними. Независимо от того, что кто-то говорит о сборке мусора в Microsoft .NET Framework, всегда вызывайте Close или Dispose явно для вашего соединения, когда вы закончите с ним. Не доверяйте общеязыковой среде выполнения (CLR) для очистки и закрытия вашего соединения. CLR в конечном итоге уничтожит класс и принудительно закроет соединение, но у вас нет гарантии, когда на самом деле произойдет сборка мусора на объекте.
Чтобы использовать пул соединений оптимально, есть пара правил, которым нужно следовать. Сначала откройте соединение, сделайте работу, а затем закройте соединение. Можно нормально открывать и закрывать соединение несколько раз при каждом запросе, вместо того, чтобы держать соединение открытым и передавать его различными способами. Во-вторых, используйте ту же строку подключения (и ту же идентификацию потока, если вы используете встроенную аутентификацию). Если вы не используете одну и ту же строку подключения, например, настраиваете строку подключения в зависимости от пользователя, вошедшего в систему, вы не получите то же значение оптимизации, которое обеспечивается пулами подключений. И если вы используете интегрированную аутентификацию, выдавая себя за большой набор пользователей, ваш пул также будет гораздо менее эффективным.
Счетчики производительности данных .NET CLR могут быть очень полезны при попытке отследить любые проблемы производительности, связанные с пулом соединений.
http://msdn.microsoft.com/en-us/magazine/cc163854.aspx