FileStream, buffer, оптимальное чтение
От: Sharov Россия  
Дата: 23.01.20 13:29
Оценка: :)
Здравствуйте.

Ряд вопросов, возможно банальные, по FileStream:

1) что будет, если я в качестве буффера в конструкторе попрошу аллоцировать недоступное системе кол-во памяти, т.е. скажем 2гб (int bufSize), а системе доступно только 1гб и файла подкачки нет?
Аллоцирует на свое усмотрение или выкинет что-то типа OOM исключения?

2) Как лучше считывать огромный файл( допустим надо посчитать кол-во вхождений определенного байта), памяти предостаточно.
Ничего лучше чем аллоцировать 2гб буффера и читать его через ReadByte я не придумал. Может бить его на чанки, и кажды поток будет обрабатывать свой чанк?
Но тогда я буду дважы проходить по буферу -- 1 раз при копировании для соотв таски, второй для подсчета байта, плюс доп. аллокации памяти.

.....
using(FileStream  
            fileStream = new FileStream(fileName, ..., maxBuf,...))
        {

       var counter = 0;         
       var    b = fileStream.ReadByte();
       while (b != -1)
       {
             if (b == neededByte) counter++;
             b = fileStream.ReadByte();        

       }        
            
        }
....


Код выше как-то можно ускорить?

Заранее благодарю.
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.