2016-12-30 10 views
1

から複数の拡大イメージをロードするときに、私は(30〜50 MBの各サイズ)ディスクから画像をロードしようSystem.OutOfMemoryExceptionにディスク

var images = new List<Image>(); 
    foreach (var imgPath in paths) 
    { 
     var img = Image.FromFile(imgPath); 
     images.Add(img); 
    } 

を次のように問題がことは、第1または第2の後の私は

System.OutOfMemoryExceptionに

を取得する画像は...私の推測では、イメージが大きすぎるということです。画像を1つずつ処理することをお勧めしますが、すべてを1つにまとめる(コラージュのように)必要があるため、サムネイルを使用できないため、できません。元のサイズを尊重する

maxRequestLength"10000000"に変更しようとしましたが、役に立たなかったです。

私は画像処理ステップに到達できないので、少なくともまだオブジェクトを処理しないことに問題はないとは思わない。

メモリを増やす方法はありますか?

P.S.私は画像にJPG形式を使用します。

+1

「最初の画像か2番目の画像」_の後になっていますか? _ "それぞれ30〜50 MB" _は小さいです。今すぐGoogle Chomeを見ると、これを入力すると比較のために** 129 MB **が使用されています。あなたはVSでメモリリークツールを実行しようとしましたか? – MickyD

+2

「maxRequestLength」に_「ディスクから画像をロードする」_とは何ですか? – MickyD

+0

ハードウェア構成、OS、アプリケーションの種類、アプリケーションの構成など、簡単に手助けする変数が多すぎます。明らかに、アプリケーションで利用可能なメモリを増やす必要がありますが、それを達成する方法を言うのは非常に難しいです。 –

答えて

0

私は使用することはお勧めしません。

Image.FromFile(path); 

それは遅いですし、代わりにあなたのプロセス を膨らまます:

var fs = new FileStream(path, FileMode.Open, FileAccess.Read); 
var photo = Image.FromStream(fs, true, false); 

は、基本的には代わりに;-)

を配置することを忘れないでください。そのすべてのデータを一度にメモリに持ち込んで、あなたのアプリとあなたのすべての愛する人を殺してください。イメージをデータストリームのように操作します。

編集は、いずれの場合も、私は一度にすべての画像を編集することはお勧めしません。 いずれかの方法でOutOfMemoryExceptionが発生する可能性があります。

可能であれば、2枚の画像を使用して作業を終えたら、それらを処分し、最終画像が完成するまで次のセットに移動します。

関連する問題