我正在开展一个项目,让我在性能方面略胜一筹.我的任务是读取大(50MB左右)的粒子坐标文件并显示它们.我想使用C++,因为我已经在学习它了.
文件中的坐标结构很简单,只有很多(比如一百万左右):
1234.5667 5234.1566 //coordinate 1
8532.6123 5152.6612 //coordinate 2
....
Run Code Online (Sandbox Code Playgroud)
作为一个菜鸟,我只想逐行阅读文件并将它们存储在向量中,这是错的吗?也许我应该首先读取整个文件(缓冲?),然后解析值?
工作范例:
clock_t c1 = clock();
vector<double> coords;
double coord;
ifstream fin("file.txt");
while(fin >> coord) {
coords.push_back(coord);
}
cout << "done. " << coords.size()/2 << " coords read.\n";
cout << "took " << (clock() - c1)/(double)CLOCKS_PER_SEC << " seconds." << endl;
Run Code Online (Sandbox Code Playgroud)
并在具有200万坐标的40MB文件上输出相应的输出:
done. 2000000 coords read.
took 1.74 seconds.
Run Code Online (Sandbox Code Playgroud)
这在我看来很快,但我认为我的思想不是一个好的判断.
如果您知道“平均”文件有多大,您可能需要使用 .reserve 预分配向量。
效率是一个棘手的游戏。不要一开始就耍花招,设计一个好的基础算法。如果不够快,您就开始查看 IO 例程,无论您是否正在创建任何“额外”对象(显式或隐式,尤其是在传递参数时)。
在您的示例中,您可能希望在打印摘要输出之前对clock()进行第二次调用——获得稍微更准确的计时!:)
| 归档时间: |
|
| 查看次数: |
6581 次 |
| 最近记录: |