使用C ++将数据写入文件 - 最有效的方法?

时间:2014-03-27 16:46:42

标签: c++ loops vector export

在我目前的项目中,我处理的是大量数据,这些数据是通过""来实现的。环。我想将数据写入CSV文件,我不知道更好 - 我应该将所有值存储在向量数组中并在最后写入文件,还是在每次迭代中写入?

我认为第一选择它会更好,但如果可能的话,我想要一个详细的答案。谢谢。

3 个答案:

答案 0 :(得分:1)

确保您正在使用启用了缓冲的I / O库,然后编写每次迭代。

通过这种方式,您的计算机可以与其余计算并行启动磁盘访问。

PS。不要做任何疯狂的事情,比如每次写入后刷新,或者每次迭代打开和关闭文件。这会扼杀效率。

答案 1 :(得分:0)

写入文件的最有效方法是减少写入操作的数量并增加每个操作写入的数据。

给定512字节的字节缓冲区,最低效的方法是写入512字节,一次写入一个操作。更有效的方法是使一个操作写入512个字节。

每次写入文件的调用都会产生开销。这种开销包括将文件定位在其目录中的驱动器上,寻找驱动器上的新位置并进行写入。写作的实际操作非常快;这是寻求和等待硬盘驱动器准备好浪费你的时间。所以把它旋转一次,通过写很多东西让它旋转,然后让它旋转下来。盘片旋转时写入的数据越多,写入效率就越高。

  • 是的,数据路径上到处都有缓存,但是对于大数据大小,所有这些都会更有效。

我建议将格式化写入文本缓冲区(512的倍数),并在某些点将缓冲区刷新到硬盘驱动器。 (512字节是硬盘驱动器上常见的扇区大小)。

如果你喜欢线程,你可以创建一个监视输出缓冲区的线程。当输出缓冲区达到阈值时,线程将内容写入驱动器。多个缓冲区可以帮助快速处理器填充缓冲区,同时将其他缓冲区写入慢速驱动器。

如果您的平台有DMA,您可以通过让DMA为您写入数据来加快速度。虽然我希望有一个好的驱动程序自动执行此操作。

我在嵌入式系统上使用这种技术,使用UART(RS232端口)代替硬盘驱动器。通过使用缓冲,我可以获得大约80%的效率 (循环展开也可能有所帮助。)

答案 2 :(得分:-1)

最简单的方法是在控制台中使用>运营商。在linux中:

./ miProgram> myData.txt

多数人得到程序的输入并放入一个文件。

对不起英文:)