Mik*_*ael 3 c++ memory-leaks visual-c++ slowdown
在过去的几个月里,我一直致力于Visual C++项目,从相机中获取图像并对其进行处理.到目前为止,这需要大约65毫秒来更新数据,但现在它已经突然显着增加.会发生什么:我启动我的程序,并且在前30次左右的迭代中它按预期执行,然后突然循环时间从65毫秒增加到250毫秒.
奇怪的是,在计时每个函数后,我发现引起减速的代码部分是相当基本的,并且在一个多月内没有被修改过.进入它的数据不变,每次迭代都相同,但最初小于1 ms的执行时间突然增加到170 ms,而其余代码仍然按预期执行(时间).
基本上,我一遍又一遍地调用相同的函数,因为它应该执行的前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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
是否有可能在泄漏一定量的内存后,您的计算机必须开始分页内容?这肯定会减慢甚至简单的功能.
在不知道函数的作用的情况下,很难确切地说出可能导致问题的原因.
编辑:正如问题评论中所建议的那样,泄漏一定数量的内存也可能会开始将事情从CPU缓存中剔除,这也会减慢速度.要么修复内存泄漏,要么在这里发布代码供我们查看,这将是一个好主意.
编辑2:在该循环中调用几个函数.除了简单的算术计算外,他们还做了什么?