Re[3]: BinaryWriter
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.11.24 15:23
Оценка: 2 (1) +3
Здравствуйте, tapatoon, Вы писали:

T>Действительно, ох уже мне эти disposable... спасибо

1. Можно ставить using сразу на BinaryWriter. Для удобства он автоматически закрывает stream (чтобы это отключить, нужно использовать специальный конструктор):
using (var bw = new BinaryWriter(new FileStream(filePath, FileMode.Create, FileAccess.Write)))
    while (byte[] data = get_data())
        bw.Write(data);

2. А зачем вам вообще BinaryWriter? Вы же пишете сырые байты. BinaryWriter нужен для записи структурированных данных.
using (var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    while (byte[] data = get_data())
        stream.Write(data);


T>Если флэшить файловый стрим, всё данные о размере обновляются, хоть файл и открыт.

Ну вот как раз флэш, помимо сброса внутреннего буфера FileStream в системный file handle, ещё и делает FlushOSBuffer. Под виндой это вызов FlushFileBuffers, который как раз не только сбрасывает внутренний буфер, но и обновляет метаданные.
T>Переделал на винапи — поведение с размером файла такое же. Только быстрее раз в 100)
Винапи делает программу непортабельной.
Такая разница в скорости означает, что вы как-то неправильно применяете классы из System.IO. Попробуйте применить их правильно, и получить перформанс сравнимый с винапи.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.