【发布时间】:2015-08-11 20:48:25
【问题描述】:
我用这个方法从一个文件中读取并将它放入一个字符串向量中;
std::vector<std::string> read_file_lines1(const char* filepath){
std::vector<std::string> file;
std::ifstream input(filepath);
Timer timer;
float time = 0;
std::string line;
int i = 0;
while (getline(input, line)){
timer.reset();
file.push_back(line);
time += timer.elapsed();
if (i == 10000)
std::cout << "10000 done" << std::endl;
i = ((i + 1) % 10001);
}
std::cout << time << std::endl;;
return file;
}
但我认为性能真的很差(22 秒内 20 万行)
稍加改动使其成为 vector<string*>(使用 file.push_back(new std::string(line)) 推送调用从 ~16 秒变为 ~1.2 秒,这是一个巨大的改进(仍然落后于我的目标)它有一个小缺点:内存使用;如果我想清除这里使用的内存,我将不得不记住创建一个循环来清除每个字符串*
现在整个方法需要6~秒,其中~5个主要用于“getline”方法中的字符串,我真的很想知道如何优化它或做出替代。
PS:我这样做确实加载了一个 3D 模型,在 Java 中使用相同的模型需要大约 0.8 秒来读取所有内容和过滤器(将“每一行放入”顶点/纹理...数组,然后将它们放入按索引顺序),所以如果我花那么多时间从 C++ 中的文件中读取每一行(在 Java/C++ 中都使用调试模式,这可能使它成为一个非常糟糕的基准,但我仍然真的很失望);
【问题讨论】:
-
"使用调试模式" -- 对非优化代码进行基准测试有什么意义?
-
“使用调试模式” 导致代码未优化。
-
他的意思是你应该在发布模式下对构建的程序进行基准测试。
-
“使用调试模式”的意思是“请不要让这段代码跑得太快!”.
标签: c++ string performance vector input