2008年4月29日火曜日

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

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

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

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

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

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

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

コメントを投稿
Related Posts Plugin for WordPress, Blogger...

Blog Archives