C#のBitmapのDisposeについて質問です。
pictureBoxに画像を表示して、Button1を押すと1pixel拡大するというコードを記述しました。
c#
1// Button1クリックイベント 2private void button1_Click(object sender, EventArgs e) { 3 Bitmap img = (Bitmap)pictureBox1.Image; 4 pictureBox1.Image = ScaleBmp(img); 5} 6 7// 元のBitmapを引き数に渡すと1pixel拡大したBitmapを出力する 8private Bitmap ScaleBmp(Bitmap src){ 9 Bitmap bmp = new Bitmap(src.Width + 1, src.Height + 1); 10 using (Graphics g = Graphics.FromImage(bmp)) { 11 g.DrawImage(src, 0, 0, src.Width + 1, src.Height + 1); 12 } 13 return bmp; 14}
このButton1を連続で何回も押すとプロセスメモリがどんどん増えていきます。
ScaleBmp関数の中でBitmapを生成してreturnしているので使用メモリが増えるのは当然なのですが巨大な画像の場合はものすごい勢いで増えていきます。
BitmapをpictureBox1.Imageに渡している場合、DisposeするとエラーになるためにDisposeすることができず、メモリが増えてしまいます。
しばらく放置すると.NetFrameworkが勝手にどこかでGCを実行するので不要になったBitmapが解放されるのですが、Button1を連打すると解放される前にメモリリークを起こしそうで困っています。
button1_Click関数の中の最後にGC.Collect()を実行すればいいのかとは思いますが、Button1を連打する度にGCを呼ぶのもよくないと思ってしまいます。
何か対策はありますでしょうか?
どうぞよろしくお願い致します。
Windows10 + VisualStudio2015 C#

回答1件
あなたの回答
tips
プレビュー