.NET FrameworkのBitmapの生成に注意

.NET FrameworkのBitmapの生成に注意

最近見ているプログラムで暫く使用していると例外が発生してしまう問題が発生していた。

よくよく調べていると、例えば以下のようなコードではたいてい失敗する。(そのままのコードではない)
頻繁にGC.collectを実行しているとうまく行くことがある。

img = new Bitmap(****で作ったオブジェクトは使い終わったらimg.Dispose()で開放するか使いまわさなければ、失敗するようだ。(または、例外処理を加えて開放されるのを待つか。)

本当は.NET Compact Frameworkで悩んでいたが、デスクトップPC(フルバージョンの.NET Framework)でも動かなかった。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;

namespace img
{
    class Program
    {
        static void Main(string[] args)
        {
            Bitmap img = new Bitmap(400, 300);
            for (int i = 0; i < 20000; i++)
            {
                img = new Bitmap(400, 300);
            }
        }
    }
}