我有一个程序可以使用以下命令保存许多>1GB的大文件fwrite
它工作得很好,但不幸的是由于每次调用的数据的性质fwrite
只写1-4字节。结果,写入可能需要一个多小时,其中大部分时间似乎是由于系统调用开销(或至少在 fwrite 的库函数中)。我有类似的问题fread
.
有谁知道任何现有的/库函数将使用内联函数缓冲这些写入和读取,或者这是您自己的另一个卷?
首先,fwrite()
是一个库而不是系统调用。其次,它已经缓冲了数据。
您可能想尝试增加缓冲区的大小。这是通过使用完成的setvbuf() http://pubs.opengroup.org/onlinepubs/009695399/functions/setvbuf.html。在我的系统上,这只会有一点点帮助,但是 YMMV。
If setvbuf()
没有帮助,你可以做你自己的缓冲,只调用fwrite()
一旦你积累了足够的数据。这涉及更多的工作,但几乎肯定会加快写入速度,因为您自己的缓冲可以变得更加轻量级fwrite()
's.
edit:如果有人告诉你这只是数量fwrite()
呼吁这就是问题所在,要求查看证据。更好的是,进行自己的性能测试。在我的计算机上,使用 500,000,000 次两字节写入fwrite()
需要11秒。这相当于大约 90MB/s 的吞吐量。
最后但并非最不重要的一点是,我的测试中的 11 秒与您问题中提到的 1 小时之间的巨大差异暗示了您的代码中可能存在其他问题导致性能非常差。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)