Быстрая запись bytearray в файл - PullRequest
0 голосов
/ 18 августа 2011

Я использую _FileStream.Write(_ByteArray, 0, _ByteArray.Length); для записи байтового массива в файл. Я заметил, что это очень медленно. Я читаю строку из текстового файла, преобразовываю ее в байтовый массив, а затем мне нужно записать ее в новый (большой> 500 Мб) файл. Пожалуйста, несколько советов, чтобы ускорить процесс записи.

Ответы [ 2 ]

1 голос
/ 18 августа 2011

FileStream.Write в основном то, что есть. возможно , что поможет BufferedStream, но вряд ли.

Если вы действительно читаете одну строку текста, которая при кодировании занимает 500 МБ, то я не удивлюсь, обнаружив, что большую часть времени тратится на выполнение кодирования. Вы должны быть в состоянии проверить это, выполнив кодирование, а затем выбросив результат.

Предполагая, что выполняемая вами "кодировка" - просто Encoding.GetBytes(string), вы можете попробовать использовать StreamWriter, чтобы обернуть FileStream - он может работать лучше с помощью таких хитростей, как многократное кодирование в одном массиве перед записью в файл.

Если вы на самом деле читаете строку за один раз и добавляете ее в файл, то:

  • Очевидно, что лучше держать входной и выходной поток открытыми на протяжении всей операции. Не читайте, а потом пишите.

  • Вы можете повысить производительность, используя несколько потоков или, возможно, асинхронный ввод-вывод. Это будет частично зависеть от того, читаете ли вы и пишете на один и тот же диск.

  • Использование StreamWriter, вероятно, все еще хорошая идея.

Кроме того, при создании файла вы можете захотите взглянуть на использование конструктора, который принимает FileOptions. Поэкспериментируйте с доступными опциями, но я подозреваю, что вам понадобятся SequentialScan и , возможно WriteThrough.

0 голосов
/ 18 августа 2011

Если вы пишете только байтовые массивы, пытались ли вы использовать метод записи BinaryWriter's?Письмо навалом, вероятно, также поможет со скоростью.Возможно, вы можете прочитать каждую строку, преобразовать строку в ее байты, сохранить эти байты для будущей операции записи (т. Е. В списке или чем-то еще), и очень часто (после чтения x строк) записывать фрагмент на диск.

BinaryWriter: http://msdn.microsoft.com/en-us/library/ms143302.aspx

...