-2

Visual C#2008 Exp Editionを使用して、プロジェクトをロードすると、プロセスが最大70,000Kのメモリを消費していることに気付きました。数時間後、これは約500,000Kになります。

この時点で、 (内に)UserControlを含むaは、Visual C#Expressのメモリエラーを示しています。画像ボックスには、で描かれた長方形のビットマップとグリッドが含まれています。PictureBoxPanelSystem.Drawing.Graphics

コードは次のとおりです。

このセグメントは、UserControlが初期化されるときに1回だけ発生します。

Bitmap myBitmap = new Bitmap(a, b);
Graphics g = null;
g = Graphics.FromImage(myBitmap);
g.FillRectangle(Brushes.SteelBlue, 0, 0, c, d);

//Paint Rows & Columns
for (int x = 0; x <= e - 1; x++)
{
    for (int y = 0; y <= f - 1; y++)
    {
        g.DrawRectangle(Pens.LightBlue, g, h, i);
    }
}
//Release Resources
g.Dispose();
//Add bitmap with grid to BG
ScorePictureBox.Image = myBitmap;

このコードは非常に頻繁に使用されます。

for (int EventIndex = 0; EventIndex <= MidiNoteDownArray.Length - 1; EventIndex++)
{
    //Paint notes to grid

    e.Graphics.FillRectangle(Brushes.LightBlue, j, k, l, m);
    e.Graphics.DrawRectangle(Pens.Purple, o, p, q, r);
}
e.Dispose();

リソースを適切に解放していませんか?どうすればこれを正しく行うことができますか?

4

2 に答える 2

2

プロジェクトを確認してください。たぶんあなたは参照を逃しています。

于 2012-05-07T01:01:01.623 に答える
1

それはおそらくあなたが作成しているビットマップです-あなたがあなたの上の画像を置き換えるときScorePictureBox、あなたは古いものを処分する必要があります、すなわち:

var oldImage = ScorePictureBox.Image;
//Add bitmap with grid to BG
ScorePictureBox.Image = myBitmap;
// Dispose of previous score image if necessary
if (oldImage != null) oldImage.Dispose();

二重処理に注意してください。通常、他のアイテムがGDI +オブジェクトを参照している間は、GDI+オブジェクトを破棄しないことをお勧めします。

using一般的な構文上の注意では、次のように明示的に呼び出すのではなく、ステートメントを使用する方がよいでしょうDispose()

using (Graphics g = Graphics.FromImage(myBitmap))
{
   ...
}
于 2012-05-07T02:20:31.130 に答える