何时为IO(C)构建自己的缓冲系统?

何时为IO(C)构建自己的缓冲系统?,第1张

概述我必须处理非常大的文本文件(2 GB),必须逐行读/写它们.使用ofstream编写2300万行非常慢,所以在开始时,我试图加快在内存缓冲区(例如256 MB或512 MB)中写入大块行的过程,然后将缓冲区写入文件.这不起作用,性能或多或少相同.我在阅读文件时遇到同样的问题.我知道I / O *** 作是由STL I / O系统缓冲的,这也取决于磁盘调度程序策略(由 *** 作系统管理,在我的情况下是 Linux 我必须处理非常大的文本文件(2 GB),必须逐行读/写它们.使用ofstream编写2300万行非常慢,所以在开始时,我试图加快在内存缓冲区(例如256 MB或512 MB)中写入大块行的过程,然后将缓冲区写入文件.这不起作用,性能或多或少相同.我在阅读文件时遇到同样的问题.我知道I / O *** 作是由STL I / O系统缓冲的,这也取决于磁盘调度程序策略(由 *** 作系统管理,在我的情况下是 Linux).

有关如何提高性能的任何想法?

PS:我一直在考虑使用后台子进程(或线程)来读取/写入数据块,而程序正在处理数据,但我不知道(主要是在子进程的情况下)这是否值得.

解决方法 2GB的文件非常大,您需要了解可能充当瓶颈的所有可能区域:

>硬盘本身
>硬盘接口(IDE / SATA / RAID / USB?)
> *** 作系统/文件系统
> C/C++图书馆
>你的代码

我首先做一些测量:

>您的代码读取/写入2GB文件需要多长时间,
>’dd‘命令读取和写入磁盘的速度有多快?例…

dd if = / dev / zero bs = 1024 count = 2000000 of = file_2GB
>使用大型fwrite()/ fread()调用写入/读取需要多长时间

假设您的磁盘能够以大约40Mb / s的速度进行读/写(这可能是一个真实的数字),您的2GB文件运行速度不会超过50秒.

它实际需要多长时间?

Hi Roddy,using fstream read method
with 1.1 GB files and large
buffers(128,255 or 512 MB) it takes
about 43-48 seconds and it is the same
using fstream getline (line by line).
cp takes almost 2 minutes to copy the
file.

在这种情况下,您的硬件绑定. cp必须读写,并且会在疯狂的情况下在磁盘表面上来回寻找.所以它(如你所见)将比简单的’读’案例差两倍多.

为了提高速度,我首先尝试的是更快的硬盘驱动器或SSD.

你还没说过磁盘接口是什么? SATA几乎是最简单/最快的选择.另外(显而易见的是,这……)确保磁盘实际上在您的代码运行的同一台机器上,否则您将受到网络限制……

总结

以上是内存溢出为你收集整理的何时为I/O(C)构建自己的缓冲系统?全部内容,希望文章能够帮你解决何时为I/O(C)构建自己的缓冲系统?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存