Как увеличить скорость записи в потоковой записи? - PullRequest
1 голос
/ 05 августа 2011

Как повысить скорость потоковой записи для записи CSV-файла 83 МБЯ увеличил размер буфера до 65536, но он также занимает больше времени.Как улучшить скорость.


StreamWriter writer =new streamWriter(
      new FileStream(filePath, FileMode.CreateNew), Encoding.UTF8, 65536))
string str=string.Empty;
while((str = reader.ReadLine())!=null)
    writer.WriteLine(str)}        
writer.Close()

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

В зависимости от количества строк, содержащихся в вашем CSV-файле, вы можете получить цикл, который выполняется миллионы раз.Не рекомендуется заходить на диск много раз.

Самый простой выход (если у вас есть память) - прочитать весь файл CSV в виде строки [] в памяти (используя File.ReadAll () iдумаю), сделайте свою обработку и запишите все это однажды (File.WriteAll () я думаю).Это значительно повысит вашу производительность.

Другой выход - использовать асинхронное чтение / запись, увеличить размер буфера И создать механизм для чтения больших кусков данных.Большой буфер, если вы читаете только 1 строку, вам не поможет.

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

На основании вашего комментария, показывающего, что на самом деле делает ваш код:

File.WriteAllText( filePath, reader.ReadToEnd() );
0 голосов
/ 05 августа 2011

Я бы попробовал увеличить буфер еще больше. При таком размере буфера потребуется более 8200 операций записи для создания всего файла. Попробуйте буфер около 256К или 512К.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...