【问题标题】:Overhead of log information in files文件中日志信息的开销
【发布时间】:2010-10-10 03:35:31
【问题描述】:

我正在进行一些长时间的模拟,可能需要几个小时到几天的时间,并且我正在将信息记录到文件中。这些文件可以达到数百 Mb 的大小,并且里面只有一个数字列表。我真的很担心由此产生的开销。我想问一下使用这种方法的开销是否真的很大,是否有其他更有效的方法可以做到这一点,只需记录信息。

我正在使用 C++ 并记录文件,我只使用 fprintf 的常用方法。为了解释开销,如果你可以举一个类似于使用文件的实际示例,这次使用文件而不使用它们,那将是理想的。

我做了一些测试,但我不知道开销是否随着文件的大小线性增长。我要说的是,在大小为 1Mb 的文件中添加一行可能与在大小为 1Gb 的文件中添加一行不同。有谁知道开销如何随着文件的大小而增长?

【问题讨论】:

    标签: logging file overhead


    【解决方案1】:

    我认为你只需要一些粗略的计算。

    让“数百 Mb”为 400MB。
    让“几个小时到几天”为 48 小时。

    (400 * 1024 * 1024 字节) / (3600 * 48 秒) = 2427 字节/秒

    显然,您可以只观察您的系统或使用实数进行计算,但使用上面的粗略估计,您的记录速度约为 2KB/秒,与平均硬盘驱动器限制相比,这是微不足道的。

    所以,不,开销似乎不是很大。是的,有更有效的方法可以做到这一点,但您可能会花费更多的时间和精力来获得微不足道的节省,除非您的数字与您所说的大不相同。

    【讨论】:

    • 嗨,Nathan 感谢您的回答,只是出于好奇,也许对于看到该问题的未来用户,您能否提供一些指导方针,如果可能有更有效的方法来做到这一点。
    • “高效”是一个有点模糊的术语,但总的来说,您会尝试用更少的资源做更多的事情。所以通常你会关注瓶颈。写入磁盘太多?少记录。或者以使用较少空间的二进制格式登录。或者不写入磁盘。写入 ramdisk 或网络驱动器等。
    • 还要注意未使用的资源。您的进程是否受 CPU 限制且内存使用量很少?也许将所有日志存储在内存中,直到任务完成。进程是否占用大量内存,但占用 cpu?在写入磁盘之前,通过一个 CPU 密集型压缩工具管道日志记录。
    【解决方案2】:

    “数百兆字节”在几天内可能无关紧要。数百 GB 可能很重要,但可能仍然不会很大。

    不过,有一种明显的方法可以为您的确切应用找出答案:在打开日志记录的情况下运行模拟,然后计时。然后在关闭日志记录的情况下运行它(使用相同的输入)并计时。比较差异。理想情况下,这样做几次以抵消其他干扰。我怀疑您会发现大量日志记录的潜在好处远远超过了性能损失。

    【讨论】:

      【解决方案3】:

      您可以将数据放入 STL 向量中并对您的数据进行一些分析,例如:
      - 排除重复行;
      - 只保存差异;
      - 一段时间后刷新数据;
      - 选择要保存的特定数据;
      - 等等...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-01
        • 2019-08-25
        • 1970-01-01
        相关资源
        最近更新 更多