У меня бесконечно большой файл. Я должен найти самые большие совпадения сегментов файла с некоторыми байтовыми массивами различной длины.
Что я делаю сейчас, так это.
1-Создано FileStream fs
ForEach byte b in fs.
save currentPosition.
//these byte arrays are different depending on b
ForEach byte array
while matching bytes
read from fs.
print matched sequence.
seek to position
Теперь программа работает медленно. Как мне улучшить чтение из файла?
Из того, что я прочитал, fs
имеет внутренний буфер, поэтому, когда я читаю байт, он по умолчанию смотрит в будущее на 4 КБ.
Мои вопросы:
Правильно ли я предположил, что последовательные чтения байтов в fs внутри цикла while выполняются из этого буфера?
Если так, что произойдет, когда я буду искать назад? Разрушается ли буфер, и я читаю, заполняю его снова тем же содержимым для каждого байтового массива? Потому что мне нужен тот же буфер, но я просто хочу повторить буфер.
Кроме того, после того, как я перебрал все байтовые массивы, и я хочу перейти к следующему b
, что происходит с этим буфером, потому что мне действительно нужен этот же буфер, но без первого байта.
Как это работает? Нужно ли мне создавать оболочку для FileStream, самостоятельно читать байтовый массив (этот буфер) и удовлетворять мои чтения из этого буфера?
Редактировать: из диспетчера задач я вижу, что средняя загрузка процессора моей программой составляет 2%. Поэтому тот факт, что программа работает медленно, должен быть из-за чтения файла.