ふとBitmapをDisposeしなかったらどうなるのかという疑問を抱きました。

たとえばこれはピクチャーボックス上をマウスが移動すると、ピクチャーボックス上に「マウスの座標は (X, Y)」と書かれたBitmapを生成します。そして通常はいらなくなったBitmapはDisposeしないといけないのですが、あえてしていません。しないとどうなるのでしょうか? またメモリーの消費量が増えていくのがわかりやすいように不必要に大きなサイズのBitmapを生成しています。

以下のコードは生成されたBitmapをPictureBox1.Imageにセットしています。それまでセットされていたものはDisposeしなくていいのでしょうか?

上記コードを実行すると急激にメモリーの使用量が増えますが、すぐに戻ります。ガベージコレクタが機能しているのではないかと思います。

では以下のコードはどうでしょうか? 処理のたびにGC.Collect();を実行しています。これだとメモリーが急激に増えることはありません。pictureBox1.Imageにこれまでセットされていた古いBitmapがガベージコレクタによって回収されているから・・・なのでしょうか?

ガベージコレクタには安易に頼るのはどうなのでしょうか? そこで以下のコードであればどうでしょうか?
これも上記と同じで急激にメモリーの使用量が増加することはありません。これが一番よいのでしょうか?

それから以下のようなコードも試してみました。今度はフィールド変数のBitmapsに生成したBitmapが格納されていきます。実行してみるとメモリーの使用量はどこまでも増え続けます。生成したBitmapをBitmapsに格納しているのでガベージコレクタに回収されることはないからです。

しかし以下を実行すればメモリーの使用量は元に戻ります。

ピクチャーボックスに生成されたBitmapを次々とセットする処理をすることは多いと思われます。少なくとも私はよくやります。やはり古いPictureBox.ImageをDisposeするのがよいと思われます。面倒くさいときはGC.Collect()でお茶を濁すこともあるかもしれませんが・・・。