このトピックに関するSOの質問/回答をいくつか読みましたが、さらに混乱しました。契約は次のとおりです。
ディスクから多くの画像を読み取るアプリケーションがあります。それだけのバイト数を読み取るのに十分なRAMがありますがSystem.OutOfMemoryException
、データの処理を開始する前であっても、データの読み取り中に取得します。
基本的に、私の読書プロセスは次のとおりです。
class Image
{
float[,] pixels;
}
public static void ReadImages()
{
List<Image> images = new List<Image>();
for(int i=0;i<length;i++)
{
Image image = ReadImageFromDisk(); // Reads image from the disk.
if ( Do I need this image? ) // Check whether to store on the memory or not
{
images.Add(image);
}
}
}
私が使用する理由は、基本的に、メモリに保存するList<Image>
数がわからないためです。Image
ディスクからを読み取り、Image
そのイメージをメモリに保存するかどうかを決定します。
基本的なメモリ計算を行う:
= 28 (image width) x 28 (image height) x 4 (float) x 500,000 (number of images)
= 1568000000 bytes = 1.568 Gigabyte
私は 64 ビットの Windows 7 を使用しており、16 ギガバイトの RAM がインストールされています。OutOfMemory
例外が発生するのはなぜですか?