【ADO.NET】DB接続後closeをしないと駄目なのか

この続きで、64bitのWindows Server上のIISで動かすと「アプリケーションプールの制限値を越えました」と怒られる現象ですが、原因はSQL Serverに接続後、ちゃんとcloseしていなかった(箇所がある)ため接続プールがクリアされなかったのが原因でした。

私の認識ではたとえcloseを実行しなくても.NETが自動的に切断(プールを解放)してくれるものだと思ってました。もちろんできるだけcloseするようプログラミングしますが。

ここにSQL Serverの接続プールに関しての説明があります。これにはcloseとdisposeを使って接続を終了することを強く勧めていますが、接続が長時間アイドル状態のときは.NETが自動的に接続を切断するという記述もあります。

64bitのバグ?実際32bitだといくらやってもエラーとなりませんでした。でも、必ずcloseするよう癖をつけといた方がよいみたいです。

ここに実際にオブジェクト破棄を保証するコードのサンプルがあるので参考に。

さらに.NETの自動メモリ管理(ガベージコレクション)について知りたい時はここ

コメント

このブログの人気の投稿

【.NET】DataGridViewを選択した際に背景色を変更しない

Can't open PID file /var/run/nginx.pid (yet?) after start: Too many levels of symbolic links

【PostgreSQL】ROWNUMのように行番号(現在行)を取得するROW_NUMBER