在过去的几个月里,我一直致力于一个 Visual C++ 项目,从相机中获取图像并进行处理。到目前为止,更新数据大约需要 65 毫秒,但现在突然显着增加。发生的情况是:我启动程序,在前 30 次左右的迭代中,它按预期执行,然后循环时间突然从 65 毫秒增加到 250 毫秒。
奇怪的是,在对每个函数进行计时后,我发现导致速度变慢的代码部分相当基本,并且一个多月没有修改。每次迭代中输入的数据都保持不变且相同,但最初小于 1 毫秒的执行时间突然增加到 170 毫秒,而代码的其余部分仍然按预期执行(时间方面)。
基本上,我一遍又一遍地调用同一个函数,前 30 次调用它会按预期执行,之后它会无缘无故地变慢。还值得注意的是,这是执行时间的突然变化,而不是逐渐增加。
可能是什么原因造成的?该代码泄漏了一些内存(~50 kb/s),但不足以保证突然减慢 4 倍。如果有人有任何想法,我很乐意听到他们!
编辑:哇,速度真快!这是减慢速度的代码(减去一些数学)。我知道这是一个如果增加行数则计算时间会迅速增加的函数。这里的关键是,使用相同的数据,30 次迭代后速度会变慢。
void CameraManager::IntersectLines()
{
// Two custom classes
TMaths maths;
TLine line1, line2;
while(lines.size()>0)
{
// Save the current line
line1 = lines[0];
// Then remove it from the list
lines.erase(lines.begin());
CvMat* aPoint;
for (int i = 0; i<lines.size(); i++)
{
line2 = lines[i];
aPoint = cvCreateMat(1, 4, CV_32FC1);
// Calculate the point of intersection
maths.Intersect(line1.xyz, line2.xyz, line1.uvw, line2.uvw, aPoint);
// Add the point to the list
points.push_back(aPoint);
}
}
}
}
是否有可能在泄漏一定量的内存后,您的计算机必须开始将内容调入/调出?即使是简单的功能,这肯定会减慢速度。
如果不知道该函数的作用,就很难确切地说出是什么原因导致了问题。
编辑:正如问题评论中所建议的那样,泄漏一定量的内存也可能会开始将CPU缓存中的内容删除,这也会减慢速度。要么修复内存泄漏,要么将代码发布在这里供我们查看,都是一个好主意。
编辑 2:您在该循环中调用了几个函数。除了简单的算术计算之外,他们还会做其他事情吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)