Как оптимизировать последовательное чтение и возврат позиции файла c #? - PullRequest
0 голосов
/ 04 ноября 2018

У меня бесконечно большой файл. Я должен найти самые большие совпадения сегментов файла с некоторыми байтовыми массивами различной длины.

Что я делаю сейчас, так это.

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%. Поэтому тот факт, что программа работает медленно, должен быть из-за чтения файла.

...