-1
ファイルをビットマップにロードして、必要なイメージプロパティを取得してから、ビットマップを破棄する問題が発生しています。OutOfMemory例外ファイルからビットマップをロードする
foreach (string file in fiList)
{
newImage = new imageInfo();
newImage.OrigName = currFile.Name;
newImage.Location = currFile.FullName;
newImage.NewName = cleanFileName(newImage);
newImage.ManualNameChange = false;
newImage.Type = type;
newImage.Size = Math.Round(sizeInMB, 2) + " KB";
newImage.LastModified = currFile.LastWriteTime;
newImage.CreateDate = currFile.CreationTime;
tmpImage = Bitmap.FromFile(currFile.FullName);
newImage.DPI =
(int)Math.Ceiling(tmpImage.HorizontalResolution);
newImage.Width = tmpImage.Width;
newImage.Height = tmpImage.Height;
newImage.PixelFormat = tmpImage.PixelFormat.ToString();
tmpImage.Dispose();
...
}
私はのOutOfMemoryエラーを取得しておくが、メモリプロファイラを実行している時に、appicationは、それが割り当てることのできる1.4ギガバイトの200Mを使用しています。私は画像を見て、このファイルは64MBのjpgなので、ビットマップに変換しても、残っている1.2GBの大部分を消費してはいけません。 Bitmap.FromFile
でエラーが発生していますtmpImage
まだ多くのメモリが割り当てられていても、OutOfMemory例外が発生するのはなぜですか?
私はあなたの問題を解決しましたが、イメージをディスク上の64MBにすることができますが、それはおそらくある程度圧縮されています。 .Netのメモリにロードされると、圧縮されなくなり、メモリの量は1ピクセルあたり_width * height *バイトになります。 –
それは本当です。それが私の質問でこれを述べた理由です。 90%の圧縮率でさえ、これはかなり損失がありますが、残っているメモリの半分に過ぎません。 –