- PR -

OutOfMemoryExceptionの発生

1
投稿者投稿内容
Yuu
会議室デビュー日: 2008/01/27
投稿数: 2
投稿日時: 2008-01-27 17:39
はじめまして,Yuuと申します.
今,Visual C#で画像を連続で処理するWindowsアプリを作っているのですが,
実行中にOutOfMemoryExceptionが発生してしまいます.
画像のサイズは1000×1200で,タスクマネージャで見てみると,
その分のメモリがどんどん使用されて行きます.

private void startButton_Click(object sender, EventArgs e)
{
    ・・・
    Bitmap bmp;
    foreach (string file in filePaths)
    {
       bmp = new Bitmap(Image.FromFile(file)); // 画像読み込み
         ・・・
       bmp.Dispose();
    }
}

ループの中に Thread.Sleep() や GC.Collect() を入れてもダメでした.
という事はどこかで一つ前のインスタンスを参照してるものがあるという事でしょうか?
画像量を少なくし,イベントを抜けるとメモリは開放されます.

何が原因で例外が発生するのか分かりません.
どなたか分かる方いらっしゃいますか.
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-01-27 18:12
引用:
コード:
bmp = new Bitmap(Image.FromFile(file));



Image.FromFile で Image のインスタンスが作られていますが、それが Dispose されてませんね。
// Bitmap のコンストラクタにファイル名を受け取るものがあるので、Image.FromFile そのものが不要ですけど。
Yuu
会議室デビュー日: 2008/01/27
投稿数: 2
投稿日時: 2008-01-27 18:44
Hongliang 様,

早速の返信,ありがとうございます.
BitmapのDispose()でImageもDispose()されると思っていました.
それ以前にBitmap(string)があったのですね.
Bitmapをきちんと調べてなかったのがいけませんでした.

Bitmap(string)を使うことでメモリ使用量が増えることもなく,
問題は解決しました.

ありがとうございます.
1

スキルアップ/キャリアアップ(JOB@IT)