0

次のようにビットマップを描画するメソッドがあります。

public void DrawGrid(){
GridBitMap = new Bitmap(x,y);
MyGraphic = Graphics.FromImage(GridBitMap);
MyGraphic.FillRectangle(BackGround, 0, 0, x, y);

//Then using loops I draw various lines like this

MyGraphic.DrawLine(Pen.Black,x,y,xx,yy);

//Then I add the Bitmap to a Picturebox 

PictureBox.Image = GridBitMap;
}

私の問題は、メソッドが呼び出されるたびにです。ますます多くのリソースを使用しています。ちらつきをあまり発生させずにビットマップとグラフィックを解放するにはどうすればよいですか? コードがより多くのリソースを消費するのを防ぎますか?

4

3 に答える 3

2

まず、描画呼び出しごとに新しいビットマップを構築する代わりに、ビットマップを保存できます。これにより、リソースの消費が大幅に削減されます。サイズが変更された場合にのみ、新しいものを生成する必要があります (つまり、x と y が変更されたと思います)。

また、ScoreGraphic.Clear を使用して空にしてみませんか?

そして何よりも、ScorePictureBox.Paint イベントから移動して、PaintEventArgs が提供する Graphics に描画してみませんか?

于 2012-05-14T16:55:57.133 に答える
1

これを試してみてください

using (Bitmap GridBitMap = new Bitmap(x,y))
{
   using (Graphics ScoreGraphic = Graphics.FromImage(GridBitMap)
   {
     ...
   }
}

実際にビットマップが必要ない場合は、画像ボックスに直接描画してみませんか? 毎回ビットマップを作成すると、時間とリソースが消費されます。

これがあなたが求めているものであることを願っています。close を使用すると、例外が発生した場合や関数を途中で終了した場合でも、リソースが確実に解放されます。

于 2012-05-14T16:54:47.953 に答える
1

これで解決するはずだと思います:

using(Bitmap bmp as new Bitmap(x,y))
{
  my code...
} //<--important marker..

命令ポインターが「重要なマーカー」を離れると、bmp の IDisposable への呼び出しが発行され、リソースが解放されます。

于 2012-05-14T16:57:14.980 に答える