【发布时间】:2016-07-15 19:46:31
【问题描述】:
我正在开发一个非常耗时的应用程序,我想加快速度。我使用 ctime 库的 clock() 函数分析了单个部分的运行时,发现了一些对我来说并不完全清楚的东西。
我有时间在方法的内外打印,我们称之为 Method1。 Method1 里面的 print 包括了它的全部内容,当然只排除了一个 float 的返回。嗯,问题是,外部打印状态是 Method1 内部打印时间的两倍到三倍。很明显,外面的打印应该说明更多的时间,但在我看来差异很大。
我的方法如下所示,我使用引用和指针作为参数来防止数据复制。请注意,数据向量包含 330.000 个指向实例的指针。
float ClassA::Method1(vector<DataClass*>& data, TreeClass* node)
{
//start time measurement
vector<Mat> offset_vec_1 = vector<Mat>();
vector<Mat> offset_vec_2 = vector<Mat>();
for (int i = 0; i < data.size(); i++)
{
DataClass* cur_data = data.at(i);
Mat offset1 = Mat();
Mat offset2 = Mat();
getChildParentOffsets(cur_data, node, offset1, offset2);
offset_vec_1.push_back(offset1);
offset_vec_2.push_back(offset2);
}
float ret = CalculateCovarReturnTrace(offset_vec_1) + CalculateCovarReturnTrace(offset_vec_2);
//end time measurement
return ret;
}
有什么“明显”的方法可以提高通话速度吗?出于可读性原因,我更愿意保留该方法,因此,我可以更改任何内容以加快速度吗?
我很感激任何建议!
【问题讨论】:
-
除非您找到内联函数的方法,否则提高调用速度的潜力不大。
-
可能有析构函数调用占用时间...如果函数中创建了很多复杂的结构,可能有很多需要清理的地方
-
就目前而言,两个参数(一个通过引用,另一个是指针)并返回一个浮点数本身不会产生太多开销
-
提供的细节太少。
Method是虚函数吗?目标架构是什么?什么是编译器优化标志? -
在 return 语句之后仍有 660,000 次
Mat释放。
标签: c++ performance methods call