Размер буфера 1k кажется немного маленьким. Как правило, размер буфера «один размер не подходит для всех». Вам нужно установить размер буфера, который соответствует поведению вашего алгоритма. Теперь, как правило, не очень хорошая идея иметь действительно огромный буфер, но, имея слишком маленький или не соответствующий тому, как вы обрабатываете каждый кусок, тоже не так уж и велико.
Если вы просто просто читаете данные за один кусок за другим в памяти до его обработки, я бы использовал более крупный буфер. Я бы, вероятно, использовал 8k или 16k, но, вероятно, не больше.
С другой стороны, если вы обрабатываете данные потоковым способом, считывая фрагмент, затем обрабатывая его перед чтением следующего, меньшие буферы могут быть более полезными. Еще лучше, если вы передаете данные со структурой, я бы изменил количество прочитанных данных, чтобы точно соответствовать типу данных, которые вы читаете. Например, если вы читаете двоичные данные, содержащие 4-символьный код, float и строку, я бы прочитал 4-символьный код в 4-байтовый массив, а также поплавок. Я бы прочитал длину строки, а затем создал буфер, чтобы сразу прочитать весь фрагмент строковых данных.
Если вы выполняете обработку потоковых данных, я бы рассмотрел классы BinaryReader и BinaryWriter. Это позволяет легко работать с двоичными данными, не беспокоясь о самих данных. Он также позволяет отделить ваш буфер от фактических данных, с которыми вы работаете. Вы можете установить буфер 16k в базовом потоке и с легкостью прочитать отдельные значения данных с помощью BinaryReader.
Может быть полезно: http://stackoverflow.com/questions/19558435/what-is-the-best-buffer-size-when-using-binaryreader-to-read-big-files-1gb/19837238? noredirect = 1 # 19837238 –