我正在创建一个简单的程序,它从文本文件中读取输入然后进行一些处理,它是用Python编写的。我听说Python中的文件读取速度慢,我在程序中定期进行读取,所以我认为我可以使用C ++进行文件读取(嵌入在Python程序中)。有人告诉我用两种语言对文件读取进行基准测试,看看它是否值得,所以我做了,结果令人困惑。
在Python中我编写了这段代码:
from timeit import default_timer as timer
start = timer()
file = open("test.txt", "r")
while True:
file_contents = file.read(1)
if not file_contents:
break
file.close()
end = timer()
print((end - start) * 1000)
我使用while循环而不是仅使用file.read()一次性读取它以尝试使其成为公平的比较。
在C ++中我写了这个:
#include<fstream>
#include<iostream>
#include<chrono>
using namespace std;
using Clock = std::chrono::high_resolution_clock;
using msDuration = std::chrono::duration<double, std::milli>;
int main() {
ifstream reader;
int n;
reader.open("test.txt");
auto start = Clock::now();
while (!reader.eof())
reader >> n;
auto end = Clock::now();
reader.close();
msDuration delay = end - start;
}
我需要进行运算符重载以输出&#34;延迟&#34;所以我只是通过在初始化后插入断点来使用调试模式进行观察。
我在带有几行(同一个)的文本文件上多次运行了两次测试,结果如下: - Python中平均0.4毫秒,有时跳到1毫秒(不经常)。 - 在C ++中平均为2.5毫秒,有时跳到最多6毫秒(不经常)。
有人可以向我解释为什么会发生这种情况以及Python在阅读文本文件时如何比C ++更快?
p.s我尝试从C ++程序中删除条件!reader.eof()和while循环并因此读取它们&gt;&gt; x&gt;&gt; y&gt;&gt; z&gt;&gt; ... 仍然没有明显的差异。
文本文件的内容(如果重要):
6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24
6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24
6 12 18 24 6 12 18 24 6 12 18 246 12 18 24
6 12 18 24 6 12 18 246 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24 6 12 18 24
编辑:对于此文件的更大实例(30mb),Python为10秒,而C ++为1分钟。差距是真实的。
编辑2:使用字符串变量来读取输入而不是C ++中的int,时间减少到35~45秒。到目前为止,Python仍然表现得更好。
编辑3:在C ++中逐行读取字符串会将时间进一步缩短到25~30秒。但是,在Python中逐行阅读大约需要1-2秒。