今日、私は少しのジレンマに出くわしました。私はGDI +を使ってフォーム上に描画するアプリケーションを作成しました。描画は毎秒タイマーによってトリガーされます。 drawメソッドはforループを使用してオブジェクトのコレクションを反復処理し、ある状態のものを描画します。C#GDI +、ループ内でのLinearGradientBrushの作成(メモリリーク)
は、私はそれが簡単なブラシよりもそんなに立派に見えるという理由だけで、LinearGradientBrushを使用してそれらを描きたいです。次
//minutes
foreach (Led l in MinuteGrid.Leds)
{
LinearGradientBrush b = new LinearGradientBrush
(l.LedRectangle, Color.GreenYellow, Color.Green, 110);
if (l.IsLit)
g.FillRectangle(b, l.LedRectangle);
b.Dispose();
}
を見て、私は(私を悩ます)、ループの各反復のための新しいLinearGradientBrushを作成していますが、私はする必要があるためのthats。コンストラクタセットでループ内でしか知ることのできないパラメータを設定する必要があるため、ループ外には作成できません。
私はLinearGradientBrushオブジェクトのDisposeメソッドを使用すると、すべてのこと信頼できるものではないことがわかります。私のアプリケーションを実行し、タスクマネージャでそれを見る場合、その噴出するメモリ。私はその後、
foreach (Led l in MinuteGrid.Leds)
{
LinearGradientBrush b = new LinearGradientBrush
(l.LedRectangle, Color.GreenYellow, Color.Green, 110);
if (l.IsLit)
g.FillRectangle(b, l.LedRectangle);
if (b != null)
{
b.Dispose();
b = null;
}
}
を次のように非常に役立つように思わB =空行を追加するとLinearGradientBrushesで作業するより良い方法がある場合、私はちょうど疑問に思って?または、より良いソリューションを使用することはできますか?
多くの感謝
スラップヘッド、ドゥ!もちろんそれはちょっと恥ずかしいよね:) –