Издержки информации журнала в файлах - PullRequest
0 голосов
/ 26 февраля 2009

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

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

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

Ответы [ 3 ]

4 голосов
/ 26 февраля 2009

Думаю, вам просто нужны какие-то подсчёты.

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

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

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

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

2 голосов
/ 26 февраля 2009

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

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

1 голос
/ 26 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...