C++;,OpenCV&;Kinect:处理速度下降 < >我使用C++(Visual Studio 2015)和OpenCV(VE3.0)处理Kinect V1发送的数据。我的C++程序在第一次调试时没有问题。但是,在它停止调试并重新开始调试之后,它会变得非常慢
我怀疑程序关闭时没有释放一些内存(即内存泄漏)。我知道如果我使用C++;,OpenCV&;Kinect:处理速度下降 < >我使用C++(Visual Studio 2015)和OpenCV(VE3.0)处理Kinect V1发送的数据。我的C++程序在第一次调试时没有问题。但是,在它停止调试并重新开始调试之后,它会变得非常慢,c++,opencv,kinect,C++,Opencv,Kinect,我怀疑程序关闭时没有释放一些内存(即内存泄漏)。我知道如果我使用new功能,我需要使用delete功能来释放内存。但我在C++程序中没有使用新< /Cuff>函数(我也没有使用 MalCube()/Cux>函数,这相当于C程序中的新< /代码>函数。 对于OpenCV,我使用程序末尾的destroyAllWindows函数。对于Kinect v1,我还使用程序末尾的NuiShutdown()、Release()、和CloseHandle()函数 我还需要做什么来释放内存(例如,释放OpenCV中
new
功能,我需要使用delete
功能来释放内存。但我在C++程序中没有使用<代码>新< /Cuff>函数(我也没有使用<代码> MalCube()/Cux>函数,这相当于C程序中的<代码>新< /代码>函数。
对于OpenCV,我使用程序末尾的destroyAllWindows
函数。对于Kinect v1,我还使用程序末尾的NuiShutdown()
、Release()
、和CloseHandle()
函数
我还需要做什么来释放内存(例如,释放OpenCV中与Mat
相关的内存)?还是其他原因导致处理速度下降
谢谢你的帮助。谢谢。第一次运行后,断开Kinect的连接,然后重新连接并尝试第二次运行 如果现在一切顺利,那么问题很可能是螺纹卡滞。设备访问通常由单独的线程处理,尤其是使用USB时,它们可能会被卡住(在访问表单主机和设备端的预期线程之间出现错误或同步问题的情况下),直到您断开设备连接(不确定您使用的是哪个Kinect驱动程序,但
NuiShutdown()
推断的JUNGO版本存在此问题)。如果第一次运行后没有留下一些卡住的进程,您还可以在断开连接之前检查任务管理器
要解决此问题,您需要找出在访问过程中您做错了什么。可能是:
删除,这也无所谓ess某些线程仍在运行
我遇到的一些基于libUSB的USB驱动程序也出现了句柄泄漏问题。但情况不同……在没有可用句柄之前,所有的驱动程序都可以正常运行。之后OS不起作用。在任何应用程序关闭之前,你都无法打开任何窗口、应用程序、任何东西
[Edit1]前端USB插槽
前端插槽通常用相对较长的电缆连接到主板(通常是扁平的,屏蔽不太好)因此,它更容易受到噪声的影响。此外,由于它通常位于HDD周围以及主板高频部分上方,因此它也会将其导入USB馈送。所有这些都会降低USB信号的质量,导致更大的抑制率,从而降低同步能力,并降低过同步我们将使用带宽
如果将其与背面的USB端口进行比较,它们没有电缆,但直接连接在PCB中,路径短且屏蔽良好,因此连接质量要好得多
因此,如果您使用要求高带宽或同步的设备,则前端端口是一个不好的选择。第一次运行后,断开Kinect的连接,然后重新连接并尝试第二次运行
如果现在一切顺利,那么问题很可能是线程卡住。设备访问通常由单独的线程处理,尤其是使用USB时,它们可能会卡住(在访问表单主机和设备端的预期线程之间出现错误或同步问题的情况下),直到您断开设备连接(不确定您使用的是哪个Kinect驱动程序,但NuiShutdown()
推断的JUNGO版本存在此问题)。如果第一次运行后没有留下一些卡住的进程,您还可以在断开连接之前检查任务管理器
要解决此问题,您需要找出在访问过程中您做错了什么。可能是:
错误的USB端口
使用背面而不是正面插槽
无效的USB传输请求
设备总是在等待一组特定的命令或流,直到它没有收到它,所以它会阻止所有其他事情。所以使用不受支持的命令或在错误的时间读取