Накладные расходы на информацию журнала в файлах

StackOverflow https://stackoverflow.com/questions/591632

  •  09-09-2019
  •  | 
  •  

Вопрос

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

Я использую C ++ и для регистрации файлов я просто использую обычные методы fprintf.Чтобы объяснить накладные расходы, если вы можете привести практический пример, подобный использованию файлов, которые занимают это время, без использования их в этот раз, это будет идеально.

Я провел некоторый тест, но я понятия не имею, растут ли накладные расходы линейно с размером файлов.Я хочу сказать, что, возможно, это не то же самое, что добавить строку в файл размером 1 Мб, чем в файл размером 1 ГБ.Кто-нибудь знает, как растут накладные расходы с размером файла?.

Это было полезно?

Решение

Я думаю, вам просто нужны некоторые предварительные расчеты.

Пусть "сотни Мб" равны 400 МБ.
Пусть "от нескольких часов до нескольких дней" будет равно 48 часам.

(400 * 1024 * 1024 байты) / (3600 * 48 секунд) = 2427 байт/сек

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

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

Другие советы

"Сотни мегабайт", вероятно, неуместны в течение нескольких дней.Сотни гигабайт вполне могли бы быть значительными, но, вероятно, все равно не были бы огромными.

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

Вы можете поместить данные в вектор STL и выполнить некоторое профилирование ваших данных, например :
- исключить повторяющиеся строки;
- сохранить только различия;
- сбросить данные через несколько времени;
- выберите конкретные данные для сохранения;
- и т.д...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top