Сообщение Re[11]: BinaryWriter от 14.11.2024 10:22
Изменено 14.11.2024 11:24 Sinclair
Re[11]: BinaryWriter
Здравствуйте, tapatoon, Вы писали:
T>Здравствуйте, Sinclair, Вы писали:
S>>Здравствуйте, tapatoon, Вы писали:
T>>>Я ж написал — при оптимальном размере буфера в 4КБ разницы нет
S>>Это не "оптимальный" размер буфера, а размер по умолчанию. Вот мне и интересно, что вы такое там намерили, что переделка его "на винапи" ускорила работу в 100 раз, или хотя бы в полтора.
T>В коде используются внутренние либы, если оставить суть, получится то, что я уже приводил. Но раз Вы настаиваете, приведу ешё раз:
T>
T>Когда я переписал на винапи, я накапливал по 4Кб и только тогда вызывал WriteFile: https://github.com/microsoft/referencesource/blob/master/mscorlib/system/io/filestream.cs#L398
T>Потом Вы меня попросили код. Тут до меня дошло, что в FileStream передаются небольшие порции, а так не честно. Сделал размер буферов одинаковыми
Что значит "сделал размеры буферов одинаковыми"? Вы сконструировали FileStream с нестандартным размером буфера?
T>2) FileStream + запись небольшими порциями — в разы (до 10 если отдавать по 1 байту)
T>3) FileStream + запись в него по 4Кб — одинаковая скорость
Очень, очень странно.
T>Здравствуйте, Sinclair, Вы писали:
S>>Здравствуйте, tapatoon, Вы писали:
T>>>Я ж написал — при оптимальном размере буфера в 4КБ разницы нет
S>>Это не "оптимальный" размер буфера, а размер по умолчанию. Вот мне и интересно, что вы такое там намерили, что переделка его "на винапи" ускорила работу в 100 раз, или хотя бы в полтора.
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: https://github.com/microsoft/referencesource/blob/master/mscorlib/system/io/filestream.cs#L398
T>Потом Вы меня попросили код. Тут до меня дошло, что в FileStream передаются небольшие порции, а так не честно. Сделал размер буферов одинаковыми
Что значит "сделал размеры буферов одинаковыми"? Вы сконструировали FileStream с нестандартным размером буфера?
T>2) FileStream + запись небольшими порциями — в разы (до 10 если отдавать по 1 байту)
T>3) FileStream + запись в него по 4Кб — одинаковая скорость
Очень, очень странно.
Re[11]: BinaryWriter
Здравствуйте, tapatoon, Вы писали:
T>Здравствуйте, Sinclair, Вы писали:
S>>Здравствуйте, tapatoon, Вы писали:
T>>>Я ж написал — при оптимальном размере буфера в 4КБ разницы нет
S>>Это не "оптимальный" размер буфера, а размер по умолчанию. Вот мне и интересно, что вы такое там намерили, что переделка его "на винапи" ускорила работу в 100 раз, или хотя бы в полтора.
T>В коде используются внутренние либы, если оставить суть, получится то, что я уже приводил. Но раз Вы настаиваете, приведу ешё раз:
T>
T>Когда я переписал на винапи, я накапливал по 4Кб и только тогда вызывал WriteFile:
https://github.com/microsoft/referencesource/blob/master/mscorlib/system/io/filestream.cs#L398
Это как раз то место, где FileStream накапливает по 4кб, и только тогда вызывает WriteFile.
T>Потом Вы меня попросили код. Тут до меня дошло, что в FileStream передаются небольшие порции, а так не честно. Сделал размер буферов одинаковыми
Что значит "сделал размеры буферов одинаковыми"? Вы сконструировали FileStream с нестандартным размером буфера?
T>2) FileStream + запись небольшими порциями — в разы (до 10 если отдавать по 1 байту)
T>3) FileStream + запись в него по 4Кб — одинаковая скорость
Очень, очень странно.
T>Здравствуйте, Sinclair, Вы писали:
S>>Здравствуйте, tapatoon, Вы писали:
T>>>Я ж написал — при оптимальном размере буфера в 4КБ разницы нет
S>>Это не "оптимальный" размер буфера, а размер по умолчанию. Вот мне и интересно, что вы такое там намерили, что переделка его "на винапи" ускорила работу в 100 раз, или хотя бы в полтора.
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:
https://github.com/microsoft/referencesource/blob/master/mscorlib/system/io/filestream.cs#L398
Это как раз то место, где FileStream накапливает по 4кб, и только тогда вызывает WriteFile.
T>Потом Вы меня попросили код. Тут до меня дошло, что в FileStream передаются небольшие порции, а так не честно. Сделал размер буферов одинаковыми
Что значит "сделал размеры буферов одинаковыми"? Вы сконструировали FileStream с нестандартным размером буфера?
T>2) FileStream + запись небольшими порциями — в разы (до 10 если отдавать по 1 байту)
T>3) FileStream + запись в него по 4Кб — одинаковая скорость
Очень, очень странно.