我正在开发一个处理相当大(4-5 MB)的矩阵形(存储为 N*M 行和列的数值)ASCII 文件的小程序:
1 2 3
4 5 6
7 8 9
etc.
我注意到旧式 C 文件输入法:
csFile = fopen("file.dat","r");
while(fscanf(csFile, "%lf", &Point)!=EOF) {
}
fclose(csFile);
比最基本的 C++ 实现快得多(230 毫秒,而 3MB 文件存储大约 230k 数值的约 1500 毫秒):
ifstream myfile ("file.dat");
while(myfile >> Point) {
}
myfile.close();
为简单起见,我省略了循环内的数据操作函数,但即使是这些“裸”示例也显示了 C 类型 I/O 的几乎七倍增强。为什么会有如此巨大的性能差异?有没有更快的方法来使用 C++ 流/函数来读取这些类型的文件?