- PR -

SqlCommand.Dispose は必要?

1
投稿者投稿内容
ばろっく
会議室デビュー日: 2006/05/24
投稿数: 6
投稿日時: 2006-07-27 15:06
はじめまして。いつも参考にしています。下記宜しくお願い致します。


[質問内容]
System.Data.SqlClient.SqlCommand の Dispose は必要なものなのでしょうか?
助っ人で他プロジェクトに呼ばれ、そこで SqlCommand を Dispose していないソースが多くあったので( NonExecuteQuery メソッドを使って更新処理を行っています)、その旨を指摘したものの、自分でもそれによって発生する実害をうまく説明できません。
今のところデータベースアクセスによる問題が頻発しているという状況ではなさそうですので、放置で良いのかとも思いましたが、興味もあり若干気にもなったので、ご意見を伺いたくスレ立ててみました。


[当方の知識(間違っていればご指摘ください)]
・IDisposable インタフェースを持つクラスのインスタンスは、アンマネージドリソースを内包している可能性があるので、使い終わったら速やかに Dispose メソッドを呼ぶのが原則
・でも DataSet 辺りは多分大丈夫。System.ComponentModel.MarshalByValueComponent の派生クラスであるが故に IDisposable が付随してきているようなものと考えられる

(以上は過去ログ等からです)


[今回調べた内容]
VisualStudio.NET2003 のヘルプを見たところ、SqlCommand は、
System.ComponentModel.Component の派生クラスである事が判りました。このヘルプによると「 Dispose メソッドを呼び出して明示的にリソースを解放することをお勧めします」という表現になっていて、必須なのかどうかが結局判りません。


[環境]
言語:VB.NET(.NET Framework1.1) Windowsアプリケーション
DB:SQL Server 2000
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-07-27 15:09
IDisposableがあるならとりあえずやっとけに一票。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-07-27 15:37
IDisposableがあるならとりあえずやっとけにもう一票。

コンテナに追加されているなら自分自身を削除するし(そういう事があるかどうかは別にして)、Disposedイベントも呼んでくれます(必要かどうかは別にして)。

必ずやっとけ、という明確な理由もないかもしれませんが、やらない理由もない。
_________________
囚人のジレンマな日々
ばろっく
会議室デビュー日: 2006/05/24
投稿数: 6
投稿日時: 2006-07-27 16:21
ぶさいくろう様、囚人様
ご意見ありがとうございます。

引用:

囚人さんの書き込み (2006-07-27 15:37) より:
必ずやっとけ、という明確な理由もないかもしれませんが、やらない理由もない。



おっしゃる通りだと思いました。
確かにより安全な形にしておく方が良いですね。
1

スキルアップ/キャリアアップ(JOB@IT)