0

背景を変更するアプリケーションに取り組んでいます。アプリケーションの一部は、3 つの画像プレビュー (3 つの画像ボックス) を含むスライドショーです。前、現在、次の画像。問題は、タイマーが作動するたびに、アプリケーションが約 8 MB のメモリ空間を消費することです。画像描画クラスが原因である可能性が最も高いことはわかっていますが、使用していない画像を処分する方法がわかりません。

更新: どうもありがとうございました。あなたが提供したコードを少し調整する必要がありますが、現在は機能しています。まったく別のオブジェクトで使用する前に、dispose メソッドを使用しようとしたとき。ありがとうございました。

以下の順番で動作します。

  1. 複数の画像を読み込む
    • 画像パスを取得する
  2. 画像が変更される時間間隔を設定する
  3. タイマーを開始する
  4. タイマーが刻むたびに、タイマーは次のことを行います

    pictureBoxCurr.BackgroundImage = Image.FromFile(_filenames.ElementAt(_currNum));
    pictureBoxPrev.BackgroundImage = Image.FromFile(_filenames.ElementAt(_currNum - 1));
    pictureBoxNext.BackgroundImage = Image.FromFile(_filenames.ElementAt(_currNum + 1));
    

新しいプレビューが表示されるたびに、メモリ使用量はさらに 8MB ほどかかります。何がそのスペースを占めているのか正確にはわかりません。

原因がわかる方、または手がかりがあれば教えてください。

4

1 に答える 1

1

画像を変更する前に、タイマーティックごとに次のコードを呼び出すことをお勧めします。

pictureBoxCurr.BackgroundImage.Dispose();
pictureBoxPrev.BackgroundImage.Dispose();
pictureBoxNext.BackgroundImage.Dispose();

これにより、ガベージ コレクターを待たずに、管理されていないイメージ リソースがすぐに解放されます。

于 2013-01-26T17:23:22.757 に答える