加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Visual C功能突然慢了170毫秒(长4倍)

发布时间:2020-12-16 10:45:23 所属栏目:百科 来源:网络整理
导读:在过去的几个月里,我一直致力于Visual C项目,从相机中获取图像并对其进行处理.到目前为止,这需要大约65毫秒来更新数据,但现在它已经突然显着增加.会发生什么:我启动我的程序,并且在前30次左右的迭代中它按预期执行,然后突然循环时间从65毫秒增加到250毫秒.
在过去的几个月里,我一直致力于Visual C项目,从相机中获取图像并对其进行处理.到目前为止,这需要大约65毫秒来更新数据,但现在它已经突然显着增加.会发生什么:我启动我的程序,并且在前30次左右的迭代中它按预期执行,然后突然循环时间从65毫秒增加到250毫秒.

奇怪的是,在计时每个函数后,我发现引起减速的代码部分是相当基本的,并且在一个多月内没有被修改过.进入它的数据不变,每次迭代都相同,但最初小于1 ms的执行时间突然增加到170 ms,而其余代码仍然按预期执行(时间).

基本上,我一遍又一遍地调用相同的函数,因为它应该执行的前30个调用,之后它没有明显的原因减速.值得注意的是,这是执行时间的突然变化,而不是逐渐增加.

可能是什么导致了这个?代码泄漏了一些内存(~50 kb / s),但还不足以保证4x的突然减速.如果有人有任何想法,我很乐意听到他们!

编辑:哇,那太快了!这是减速的代码(减去一些数学).我知道这是一个函数,如果你增加行数,计算时间会迅速增加.这里的关键是,使用相同的数据,这会在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:在该循环中调用几个函数.除了简单的算术计算外,他们还做了什么?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读