Има ли все пак, за да се определи колко повече RAM моята програма може да разпредели до OutOfMemoryException?

Имам нужда от това, за да определя дали мога да заредя файла изцяло в RAM с File.ReadAllBytes (бързо) или да обработя файл с части чрез FileStream, като прочета количеството байтове, близки до OutOfMemoryException, но достатъчно, за да го избегна.

Правя това, за да намаля натоварването на HDD. Мисля, че е по-добре да четете 1gb наведнъж, отколкото да правите цикли на четене като: четене на 4 байта -> обработка на тези -> четене на 4 байта отново -> обработка на тези -> ...


person Kosmo零    schedule 20.06.2013    source източник
comment
Склонни сте да не можете, защото паметта е проблем на операционната система. Опитахте ли да разгледате файлове с карта на паметта?   -  person Adam Houldsworth    schedule 20.06.2013
comment
Благодаря ви за това. Не знаех, че съществуват в c#. Използвах .net 2.0 и те са нови в .net 4.0. Но не знам колко бърз е достъпът до него... Не само скоростта, но и циклите на четене на HDD трябва да са оптимални, вместо да чета някои други файлове и винаги да преминавам от моя файл към други.   -  person Kosmo零    schedule 20.06.2013


Отговори (1)


Разпределението на паметта зависи от натоварването им в момента. Не можете да изберете номер и да се надявате, че винаги ще можете да разпределите толкова много място. Трябва да изберете безопасен номер, който има малък шанс за провал. Потоците обикновено използват 1-8MB буфери, предполагам.

Натоварването на HDD би било горе-долу същото при четене на 1 Gb наведнъж и четене на парче от 256 MB 4 пъти. В крайна сметка: четете 1GB.

person ata    schedule 20.06.2013