Здравствуйте.
Ряд вопросов, возможно банальные, по 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();
}
}
....
Код выше как-то можно ускорить?
Заранее благодарю.