Visual C++ 函数突然变慢 170 毫秒(长 4 倍)

2024-02-29

在过去的几个月里,我一直致力于一个 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(使用前将#替换为@)

Visual C++ 函数突然变慢 170 毫秒(长 4 倍) 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 相机意图不适用于三星 Galaxy S3

    我有一个活动 其中我为用户提供了单击相机中的图像的选项 然后我将该图像存储在字节数组和数据库中 但是我的代码似乎不适用于 Samsung Galaxy S3 下面是代码 相机调用意图 if i 0 Intent cameraIntent n
  • 有没有更有效的方法来使用 angularjs 序列化表单?

    有没有办法序列化 angularjs 的函数 我的帖子现在看起来像这样 scope signup submit function var formData username scope username full name scope fu
  • 是否可以通过 GNU 并行并行 awk 写入多个文件?

    我正在运行一个 awk 脚本 我想通过 GNU 并行对其进行并行化 该脚本根据每一行上的值将一个输入文件多路分解为多个输出文件 代码如下 usr bin awk f BEGIN FS OFS t bc is the field that d
  • 使用基于关联数组的 UML 建模类型

    假设有一个 PHP 子系统 它仅使用关联数组来存储某种结构化数据 因此 实际上在语言级别上没有机制来约束这些结构 但您希望在设计中使用 UML 来定义它们 E g 在 PHP 中 联系人可能是这样的关联数组 name gt John Doe
  • C++:从模板参数生成字符串文字

    template lt unsigned int i gt struct t static const char s template lt unsigned int i gt const char t i s where 是 0 1 2
  • 将函数定义为 x,y 数据的插值

    我在 data txt 中有 2 列 x y 数据 如下所示 0 0 1 1 2 4 3 9 4 16 5 25 现在我想定义一个函数 f x 其中 x 是第一列 f x 是第二列 然后能够打印该函数的值 如下所示 f 2 这应该给我 4
  • 为什么 isnumeric 不起作用?

    我正在阅读一个非常简单的 python3 指南来使用字符串操作 然后我遇到了这个奇怪的错误 In 4 create string string Let s test this test to see if it is numeric str
  • 删除 C++ 向量中的重复条目

    只是想删除重复项 泳池是vector
  • 如何配置 Visual Studio Code 来解析 AWS Lambda 层的输入路径 (javascript)

    我使用 VS Code 开发 AWS 托管的无服务器应用程序 该应用程序使用 Lambda 最近 我决定开始使用 Lambda Layers 来提取和重用公共代码 我遇到的问题是 AWS Lambda 需要 Lambda 层的以下导入 co
  • PHP MySQL PDO TextArea 带条件检查的Where 子句

    我有一个页面 如下面的屏幕截图所示 这个想法是输入公共汽车号码和特定路线上的所有站点列表 每条线路一个 站点已存储在名为 stops 的数据库表中 我需要文本区域中每个站点的 ID 我当前的代码仅获取文本区域中最后一站的 ID 我觉得我失去
  • 在 MVC 5 中填充 DropDownList

    这是我的代码添加新产品视图模型 using AccessorizeForLess Data using System Collections Generic using System ComponentModel DataAnnotatio
  • numpy datetime64 添加或减去日期间隔

    我正在解析一个巨大的 ascii 文件 其中包含分配给条目的日期 因此 我发现自己使用 datetime 包与 numpy datetime64 并行来添加数组功能 我知道 pandas 包可能是最推荐用于约会的 但是尝试在没有 panda
  • 如何使用 golang 从 Amazon S3 存储桶的子文件夹中获取对象列表?

    如何使用 golang 从 Amazon S3 存储桶的子文件夹中获取对象列表 I tried svc s3 New session New aws Config Region aws String us east 1 params s3
  • 应用内恢复在 Debug 上运行良好,但在 iPhone sdk 中的 AdHoc 上崩溃

    当我单击 恢复 按钮 AdHoc 版本 时 我的应用程序崩溃了 但同一应用程序在调试模式下工作正常 我的代码 SKPaymentQueue defaultQueue restoreCompletedTransactions 崩溃报告 Nov
  • 从 Android 向 PLC 发送布尔值

    我能够与 PLC 建立连接以从中读取数据 现在有一个问题 那就是我必须编写一种方法来修改PLC中的数据 为了实现这一点 我必须向 PLC 发送两个值 一个 int 值和一个 boolean 值 我通过 net wimpi modbus 包中
  • Mp4 视频旋转元数据

    我开发了一个 android ios 视频共享应用程序 可以录制视频并将其上传到亚马逊 s3 为了兼容 android ios 以 mp4 格式录制 H264 AAC 编解码器 用户可以拍摄肖像或风景 应用程序从传感器获取信息 设置文件的旋
  • 无效的规格缓存文件

    我在 Windows 8 上安装了 ruby 2 0 0p247 x64 mingw32 和 Gem 2 2 2 我有一个持续存在的问题 gem 导致它几乎无法使用 每当我尝试安装新的 gem 时 我总是会得到 ERROR While ex
  • Python如何将数据帧的两列组合成一个列表?

    我有一个数据框 如下所示 df index data1 data2 0 20 120 1 30 456 2 40 34 如何将上面 df 中的两列组合成一个列表 使得第一行元素先出现 然后是第二行 我的预期输出 my list 20 120
  • Laravel 5.2:Flash 没有定义的提示路径

    我试图在安装 laracasts flash 1 3 包后创建一个视图 这是我的代码 include gazett errors 在blade php文件的 gazett errors 中找到以下代码 div class row div c
  • Visual C++ 函数突然变慢 170 毫秒(长 4 倍)

    在过去的几个月里 我一直致力于一个 Visual C 项目 从相机中获取图像并进行处理 到目前为止 更新数据大约需要 65 毫秒 但现在突然显着增加 发生的情况是 我启动程序 在前 30 次左右的迭代中 它按预期执行 然后循环时间突然从 6