gpt4 book ai didi

C++ 多次写入文件的有效方法

转载 作者:太空狗 更新时间:2023-10-29 21:46:20 28 4
gpt4 key购买 nike

我正在处理一个回调函数,我想根据回调中的数据写入不同的文件。

例如,在一个调用中,我可能想写入 january.csv,而在另一个具有不同数据的调用中,它可能是 july.csv。没有预先确定的顺序,每次回调可能是任何月份,我无法提前知道。 january.csv(实际上是所有月份)将被写入多次。

这些回调发生得非常快,所以我需要这段代码尽可能高效。

我会采用的天真的方法是每次都使用以下代码:

ofstream fout;
fout.open(month_string);
fout<<data_string<<endl;
fout.close();

问题是这似乎不是很有效,因为我不断地打开/关闭 month.csv 文件。有没有更快的方法可以让 january.csv、february.csv 等始终打开以加快速度?

编辑:我在 Linux 上写入/dev/shm,所以 I/O 延迟并不是真正的问题。

最佳答案

您想减少 I/O 调用的次数,同时在调用它们时充分利用它们。

例如,缓存数据并将更大的 block 写入文件。您可以有另一个线程负责定期将缓冲区刷新到文件中。

低效率的基础有两个:WAITING硬盘驱动器初始化(加快速度),第二个是定位文件和空扇区写入。无论数据量如何,都会发生这种开销你在写。数据 block 越大,有效写入的时间就越多(盘片旋转时)。闪存/拇指驱动器也是如此;拇指驱动器有开销(解锁、删除等)。因此,目标是通过大块写入来减少开销。

您可能需要考虑使用数据库:Evaluating the need for database.

关于C++ 多次写入文件的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15502431/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com