gpt4 book ai didi

c++ - fwrite 对大量小写的效率

转载 作者:可可西里 更新时间:2023-11-01 18:14:56 25 4
gpt4 key购买 nike

我有一个程序可以使用 fwrite 保存许多 >1GB 的大文件它工作正常,但不幸的是,由于数据的性质,每次调用 fwrite 只写入 1 -4字节。结果写入可能需要一个多小时,大部分时间似乎是由于系统调用开销(或至少在 fwrite 的库函数中)。我对 fread 也有类似的问题。

有谁知道任何现有的/库函数可以使用内联函数缓冲这些写入和读取,或者这是您自己的另一个卷?

最佳答案

首先,fwrite() 是一个库而不是系统调用。其次,它已经缓冲了数据。

您可能想尝试增加缓冲区的大小。这是通过使用 setvbuf() 完成的.在我的系统上,这只有一点点帮助,但 YMMV。

如果 setvbuf() 没有帮助,您可以自己进行缓冲,并在积累了足够的数据后才调用 fwrite()。这涉及更多工作,但几乎肯定会加快写入速度,因为您自己的缓冲可以比 fwrite() 的轻得多。

编辑:如果有人告诉您问题出在 fwrite() 调用的绝对数量上,请要求查看证据。更好的是,做你自己的性能测试。在我的计算机上,使用 fwrite() 进行 500,000,000 次双字节写入需要 11 秒。这相当于大约 90MB/s 的吞吐量。

最后但并非最不重要的一点是,我的测试中的 11 秒与您问题中提到的 1 小时之间的巨大差异暗示了您的代码中可能存在其他导致性能极差的原因。

关于c++ - fwrite 对大量小写的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13588245/

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