投稿者 魔界の仮面弁士  (社会人) 投稿日時 2012/5/7 14:25:34
追加で、Pen や Brush のような存在にも注意してください。

これらは内部で GDI+ API のハンドルを保持するため、使用後には Dispose を
必要とするのですが、Pens.Red や Brushes.Blue などについては、勝手に
Dispose するわけにはいきません。

何故なら、これらは自分で生成したインスタンスではなく、
.NET Framework 側で内部的に生成されるインスタンスであるためです。
Pens.Red.Dispose してしまうと、アプリケーションドメインを再起動するまで
Pens.Red を利用することができなくなってしまいます。


これと同様なものとしては、Graphics オブジェクトがあります。

Control.CreateGraphics や Graphics.FromImage などで取得した
インスタンスの場合、Dispose を明示的に呼び出す義務が発生しますが、
Paint イベント(あるいは OnPaint メソッド)の引数から得た e.Graphics は
Dispose してはいけません。



なお判断がつかないものに関しては、内部実装をソースから読み取るという手があります。
(ただし残念ながら、すべてのソースが公開されているわけではありません)
http://www.jankh.net/menu-memo-pg/menu-memo-dotnet/28-content-dotnet-source.html