開いた接続をすべて閉じるのはあなたの責任です。プーリングを使用するかどうかに関係なく、パターンは、接続を作成して開き、1つ以上のSqlCommandに使用して閉じます。
プーリングに関しては、プーリングが有効になっている接続は、閉じられる前に再利用されません。その時点で、接続は再利用される前にリセットされます。どちらの方法でも、接続を閉じる必要があります。
接続プールの使用に影響を与える複数のスレッドに関しては、それがどのように関連しているかわかりません。SqlConnectionはスレッドセーフではないため、特定の接続の所有権を単一のスレッドに割り当てるか、一度に1つのスレッドのみがそれにアクセスするようにする必要があります。いずれにせよ、完了したら閉じる限り、接続プールに問題はありません。
私は理解しており、2k接続で何が起こるかはわかりませんが、その多くの接続のオーバーヘッドが正常であるとは想像できません。データベースまたはCPUのいずれかによって制限されることになりますので、設計を再考することを検討します。おそらく、より少ない接続を許可するある種のバッファリングまたは委任。
たとえば、インバウンドEDIファイルを一度に多数処理するアプリケーションがあります。各ファイルには、データベースの更新が必要な約5万件のレコードがあります。ファイルごとに1つの接続で50,000コマンドを実行する代わりに、後で更新するためにキューに入れられる変更を生成するリーダーがあります。
リーダーが5000程度の更新を作成した後、キューはデータテーブルを作成し、それをパラメーターとしてストアドプロシージャに渡します。これにより、1回のラウンドトリップ、1回のトランザクション、および1回の接続で、多くのファイルからの5000回の更新を処理できます。1秒あたり200回の更新から1秒あたり17,000回の更新に変更しました。