大規模なアプリケーションでのGDIリソースリークを調査しています。これらの問題がどのように発生するかをさらに理解するために、意図的に「リーク」した非常に小さなアプリケーションを作成しました。これは、100個のペンオブジェクトを作成するための簡単なユーザーコントロールです。
パブリック部分クラスTestControl:UserControl
{{
プライベートリストペン=newList();
public TestControl()
{{
InitializeComponent();
for(int i = 0; i <100; i ++)
{{
pens.Add(new Pen(new SolidBrush(Color.FromArgb(255、i * 2、i * 2、255-i * 2))));
}
this.Paint + = new PaintEventHandler(TestControl_Paint);
}
void TestControl_Paint(オブジェクト送信者、PaintEventArgs e)
{{
for(int i = 0; i <100; i ++)
{{
e.Graphics.DrawLine(pens [i]、0、i、Width、i);
}
}
}
ただし、オブジェクトのインスタンスを作成してフォームに追加すると、TaskManagerを使用してアプリケーションを見ると、現在、最大37個のGDIオブジェクトが表示されます。新しいTestObjectユーザーコントロールをフォームに繰り返し追加しても、 37個までのGDIオブジェクトしか表示されません。
ここで何が起こっているのか!System.Drawing.Penのコンストラクターは、GDI + APIを使用して新しいペンを作成し、新しいGDIオブジェクトを使用すると思いました。
私はここで気が狂うに違いない。GDIオブジェクトを作成する簡単なテストアプリケーションを作成できない場合、それらをリークするテストアプリケーションを作成するにはどうすればよいですか。
どんな助けでも大歓迎です。
よろしく、コリンE。