Я хочу часто записывать данные в файл,
Интересно, если я вызываю CreateFile () каждый раз, когда пишу,
Стоит ли этот путь так дорого, как я называю его один раз, тогда
использовать ручку много раз?
Если вы собираетесь записывать в файл несколько раз, было бы лучше сохранить дескриптор, возвращаемый CreateFile (). Создание дескриптора ядра для файла всегда будет более неэффективным, чем повторное использование старого дескриптора (при прочих равных условиях), но могут быть и другие соображения, которые необходимо учитывать. Как всегда, вы должны измерить производительность до и после , чтобы выполнить любую такую оптимизацию.
Держать ручку открытой - не обязательно лучший подход. Держать открытую ручку может быть проблематично, в зависимости от вашего дизайна. Хотя CreateFile, безусловно, имеет накладные расходы, я был бы очень удивлен, если бы он не был пренебрежимо мал по сравнению со стоимостью самих операций ввода-вывода. При этом, способ быть уверенным в том, чтобы попробовать оба способа и измерить разницу. Если это незначительно, как я подозреваю, тогда используйте любой подход, который вам больше подходит.
CreateFile определенно займет некоторое время для каждого вызова (я думаю, микросекунды, если вы снова открываете один и тот же файл много раз, благодаря буферизации драйвера и ОС, но вам следует измерить небольшой тест, если это важно тебе). Но сохранение файла открытым в течение неопределенного времени может иметь неприятные результаты в случае сбоя программы или системы в середине операции - зависит ли это от того, с каким форматом файла вы работаете, и какие операции записи вы выполняете над ним .
CreateFile
Существуют накладные расходы при создании дескрипторов для файлов, и вам лучше создать один дескриптор и хранить его, пока вы хотите читать / записывать в файл. Это зависит от того, сколько вы делаете, вы делаете это 100 раз в секунду или раз в минуту?
Повторное использование дескриптора файла даст вам лучшую производительность и лучший дизайн. Скорее всего, кеширование диска операционной системы будет скрывать многие потери производительности. Я не уверен, почему вы захотите повторно вызывать CreateFile (), если вы не обращаетесь к нему из разных областей приложения, и это затрудняет передачу дескриптора.