【发布时间】:2016-06-08 13:33:15
【问题描述】:
令我惊讶的是,我注意到以下 C++ 仅读取一个大文件行,将这些行存储到一个向量中并输出向量大小的运行速度比其 Python 对应项慢得多。如何优化它?谢谢
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
int main () {
std::ifstream infile("longfile.txt");
std::string line;
std::vector<std::string> lines;
while (std::getline(infile, line)) {
lines.push_back(line);
}
std::cout << lines.size() << std::endl;
return 0;
}
运行:
$ time ./a.out
1390000
real 0m6.388s
user 0m6.130s
sys 0m0.243s
Python:
with open('longfile.txt') as f:
lines = f.readlines()
print len(lines)
运行:
$ time python test.py
1390000
real 0m1.003s
user 0m0.158s
sys 0m0.146s
【问题讨论】:
-
不,我事先不知道。
-
Python
readlines函数所做的基本上就是您的 C++ 程序所做的。如果您不知道开始的行数,并且如果它们的大小不完全相同,那么真的没有办法优化它。 -
一些问题:(1)你是如何编译C++程序的,你是否使用了像
-O2这样的优化标志?如果不是,那么比较是没有意义的。 (2)你的时间值,你能重复并确认它们吗? Python 可能会更快,因为到第二次运行时,数据已缓存在内存中。我们需要更多信息。 -
以交替顺序重复运行这两个测试,以排除由于磁盘和/或操作系统级别的缓存而产生的任何奇怪影响。
-
试试
std::deque它不需要像vector需要的那样将内部存储组织在一个连续的内存区域中。
标签: python c++ optimization stream