производительность fopen / fclose - PullRequest
4 голосов
/ 22 декабря 2010

Обычно в большинстве продуктов реализован механизм файла журнала. Как лучше писать файл журнала отладки с точки зрения производительности fopen / fclose. Является ли сохранение указателя файла открытым (если включен регистратор) хорошим вариантом или частым открытием и закрытием файловых указателей каждый раз, когда необходимо записать какое-либо утверждение в файл журнала?

Ответы [ 4 ]

2 голосов
/ 22 декабря 2010

В идеале, вы не должны закрывать файл журнала до конца. Обычно во многих продуктах есть некоторый механизм обработки сбоев, который в любом случае вызывается перед завершением работы приложения. Это будет лучшее место, чтобы закрыть файл журнала.

Для окон вы можете проверить SetUnhandledExceptionFilter

0 голосов
/ 22 декабря 2010

Я обычно записываю в память (переменную) и записываю в файл только один раз, когда приложение завершает работу.Конечно, это не принесет много пользы, если приложение аварийно завершит работу, или вам нужно прочитать журнал во время работы программы, но это обычно не проблема для меня, и производительность выше.Я полагаю, зависит от ваших потребностей.

0 голосов
/ 22 декабря 2010

На основании комментария, который вы можете использовать fstream. Просто откройте ofstream в начале, и он закроется, когда программа закончится. Использование fstream вместо fopen / close в стиле C облегчает многие вещи, поскольку оно соответствует принципу RAII, поэтому вам не нужно беспокоиться о закрытии файла. Вероятно, нет причин закрывать файл вручную и открывать его снова каждый раз, когда вы хотите что-то записать. Если вы не хотите одновременно записывать в один и тот же файл другую программу, открывайте и закрывайте файл периодически - просто пустая трата времени и кода.

0 голосов
/ 22 декабря 2010

Обычно это зависит от того, с каким файлом вы взаимодействуете. Конечно, двоичные файлы должны быть открыты во время чтения. Вы можете разобрать текст в строку и сразу же закрыть файл, если файл представляет собой простой текст.

Я бы хотел сказать, что вы должны держать указатель файла открытым в течение всего времени жизни программы, но в случае сбоя он никогда не закроется. Затем я предложу держать его открытым во время относительно безопасных операций и операций с низким уровнем риска, но открывать / закрывать его постоянно, когда вы неравнодушны к стабильности приложения. Никто не хочет, чтобы файловые указатели оставались открытыми. :)

...