逐行读取字符串文本文件的最快方法

Fastest way to read a text file of strings line by line

本文关键字:方法 文件 读取 字符串 文本 逐行      更新时间:2023-10-16

可能重复:
在C++中实现高性能顺序文件I/O的最快方法是什么?

我环顾四周,仍然不确定这个问题的答案。

当从每行都有任意单词的文本文件中读取时,从该文件中读取单词的最快方法是什么?项目的范围要求以最快的速度读取文件。

在Windows 7。无跨平台考虑。

编辑:请记住,这个文件读取是一次性的,它不会再次被读取,也不会被写入。程序启动,从文件中读取,并将其推入数据结构,loadFile()函数再也不会被调用。

事实上,您已经标记了"多线程",这让我认为您正在考虑对文件进行线程读取。我真的建议您重新考虑,因为这会导致非常棘手的并发问题出现。您必须深入研究互斥、信号量和进程间通信的兔子洞,这可能会让即使是最优秀的开发人员也为线程之前的美好时光而哭泣。

你有一个.txt文件,文件中有单词要读。你必须打开文件,你必须阅读每一个单词。没有办法绕过它。除非你愿意将文本文件处理成一个用于并发访问的数据结构(intel TBB有一些不错的),否则你最好的选择可能是只进行单线程读取,并在所有内容都是本地的之后将数据传给其他线程。

内存映射文件或以固定大小的大块读取文件并处理内存中的数据。

根据我对您的问题的理解,您的目标是读取一个单词文件,并将每个单词插入到一些数据结构中。您希望此read+插入尽可能快。(我不会争论这样做的理由或智慧,我只会接受这是一个要求。:-)如果我的理解是正确的,那么也许另一种方法是编写一个实用程序,读取单词文件,将它们插入数据结构中,然后将该数据结构序列化为文件(例如BLOB.dat)。然后,您的主程序将把BLOB.dat反序列化为所需的数据结构。从本质上讲,您可以将word文件预处理为一些中间二进制格式,这些格式可以最有效地加载到数据结构中。或者,在你的情况下,这会是作弊吗??

Donot内存映射文件。正如Raymond Chen所解释的,这扼杀了顺序访问优化。由于磁盘速度较慢,预取将使磁盘保持繁忙状态,从而提高吞吐量。

您的文件可能会以最快的速度加载。毕竟,大多数文件操作都只调用相同的系统调用。据说IOstreams比cstdio慢,但我建议您在这里使用分析工具来找到最好的选项集。调整缓冲区大小以满足您的需要。但是,不幸的是,对于大文件,您将花费大部分时间等待IO,只有很小的时间用于处理。调整装载方式不会给你带来太多好处。

但既然你要等待,就要确保你明智地利用时间。

生成一个线程,以便在应用程序启动时立即加载文件,并利用这段时间执行其他操作。如果您需要数据来执行任何操作,请将读取文件的块传递给其他线程进行处理。