@IT会議室より
Dispose していいのかどうか悩むべき
上記の記事に非常に有意義なコメントを書いてくれた人がいるので紹介する。是非コメント欄を読んで頂きたい。こういうコメントを書いてくれる人は大歓迎だ。私の記事を読んで「こいつアホな事を偉そうに言ってるな!」と思ったら、どしどし未熟な私に意見して欲しい。忌憚ない意見ほど有難い。
#でも、少々白熱したので気分を害したなら申し訳ありません。懲りずに再びコメントを書いてくれると非常に嬉しい。
Dispose パターンは単純にはいかない。GC を備えた CLR はメモリの面倒はみてくれるが、それ以外のリソースの面倒は我々がみなければならない。リソースは GC に任せてれば良いとか、IDisposable を実装しているなら兎に角 Dispose を呼べというスタイルでは駄目な事は明白である。
最も大事な事は「Dispose していいのかどうか悩む事」。
先ず、自分で生成し、且つ非常に寿命が短いインスタンスは Dispose してよい事がほぼ明確にわかる。勿論ドキュメントを読んで判断する事。
次に、自分で生成していないが、非常に寿命が短いインスタンスは Dispose してよい事があまり明確ではないが、多分 Dispose して良い。勿論ドキュメントをよく読む事。
その次に、自分で生成したが、寿命が長いインスタンスは Dispose してよい事が殆ど明確ではない。こういった寿命が長くなりがちなインスタンスのリソースは早々に破棄しなくてもよいリソースだったりする。少々寿命が長くても困りはしないだろう。GC に任せてもよいと思う。勿論ドキュメントをよく読む事。
最後に、自分で生成していないが、寿命が長いインスタンスは Dispose してよい事がまるで明確ではない。誰が管理しているのかも分からなくなる。このような場合は殆どにおいて GC に任せるしかない。また、設計が誤っていないか見直そう。勿論ドキュメントをよく読む事。