При записи большого количества последовательных данных на диск я обнаружил, что при наличии внутреннего буфера 4 МБ и при открытии файла для записи я указываю [FILE_FLAG_NO_BUFFERING][1]
, так что используется мой внутренний буфер.
Но это также создает требование записи в полных секторальных блоках (512 байт на моем компьютере).
Как записать последние N <512 байт на диск? </p>
Есть ли какой-либо флаг в WriteFile, чтобы разрешить это ?
Можно ли дополнить их дополнительными NUL
символами, а затем обрезать размер файла до правильного значения? (С SetFileValidData
или подобным?)
Для тех, кому интересно, почему стоит попробовать этот подход. Наше приложение регистрирует много . Для этого существует специальный поток журналов, который форматирует и записывает журналы на диск. Также, если мы регистрируем с максимальной детализацией, мы можем регистрировать больше в секунду, чем может обработать дисковая система. (Обычно замечается для клиентов с системами SAN, которые не очень хорошо настроены.)
Итак, цель - записать в журнал как можно больше информации, но также заметить, когда мы начинаем перегружать систему, а затем немного сдерживаемся. Как сокращение детализации журналов.
Отсюда возникает идея заполнить большой блок памяти и передать его ОС, надеясь уменьшить накладные расходы.