【发布时间】:2015-08-14 09:29:22
【问题描述】:
我有一个将近800M的大文件,想逐行读取。
一开始我用 Python 编写程序,我使用 linecache.getline:
lines = linecache.getlines(fname)
大约需要 1.2 秒。
现在我想将我的程序移植到 C++。
我写了这些代码:
std::ifstream DATA(fname);
std::string line;
vector<string> lines;
while (std::getline(DATA, line)){
lines.push_back(line);
}
但它很慢(需要几分钟)。如何改进?
- Joachim Pileborg 提到了
mmap(),并且在 Windows 上CreateFileMapping()可以工作。
我的代码在VS2013下运行,当我使用“DEBUG”模式时,需要162秒;
当我使用“RELEASE”模式时,只有7秒!
(非常感谢@DietmarKühl 和@Andrew)
【问题讨论】:
-
您正在运行 C++ 程序的优化版本,对吧?
-
您的意思是
linecache.getline?没有linecache.getlines。 -
第一个例子用空格分割输入。当然会慢一些。
-
第一个 C++ 代码不读取 lines,它读取的是空格分隔的“单词”。
-
使用 C++ I/O 流执行时间关键型操作(例如分析)时,最好调用
std::ios_base::sync_with_stdio(false)。