Re[11]: BinaryWriter
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 14.11.24 10:19
Оценка:
Здравствуйте, tapatoon, Вы писали:


T>В коде используются внутренние либы, если оставить суть, получится то, что я уже приводил. Но раз Вы настаиваете, приведу ешё раз:

T>
T>using (FileStream file = new FileStream(filePath...)) // или Kernel32.CreateFile
T>{
T>    long bytesWritten = 0;
T>    do
T>    {
T>    var data = getData();
T>        file.Write(data, 0, data.Length); // или Kernel32.WriteFile
T>        bytesWritten += data.Length;
T>    }
T>    while (continueWrite(bytesWritten));
T>}
T>


T>Когда я переписал на винапи, я накапливал по 4Кб и только тогда вызывал WriteFile. А как я уже писал, данные приходили небольшими порциями, а сначала и вовсе разных типов, поэтому была связка FileStream + BinaryWriter. Разница — сотни раз.

T>Потом Вы мне указали на лишний BinaryWriter — убрал. Разница стала полтора раза.
T>Потом Вы меня попросили код. Тут до меня дошло, что в FileStream передаются небольшие порции, а так не честно. Сделал размер буферов одинаковыми и FileStream молодцом, даже победил) О чём я и написал.

T>Итог, разница WriteFile с переданным буфером в 4Кб и

T>1) FileStream + BinaryWriter + запись небольшими порциями — сотни раз
T>2) FileStream + запись небольшими порциями — в разы (до 10 если отдавать по 1 байту)
T>3) FileStream + запись в него по 4Кб — одинаковая скорость

Вообще то для буферизации стрима есть BufferedStream

Ну и оптимальным у народа получалось порядка 256Кб
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.