Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Kinect进行螺纹加工_C#_Multithreading_Slimdx_Kinect_Openni - Fatal编程技术网

C# 使用Kinect进行螺纹加工

C# 使用Kinect进行螺纹加工,c#,multithreading,slimdx,kinect,openni,C#,Multithreading,Slimdx,Kinect,Openni,我正在编写一个使用Kinect的C#应用程序,目前我正在将输出写入着色器资源并将其渲染为纹理,我的问题是Kinect(显然)仅以30fps的速度运行,因此它严重限制了我的性能 克服这一问题的最佳方法是多线程吗? 是否有某种设计模式可以帮助解决此类问题? 据我所知,我可能希望kinect处理线程上的数据,然后在处理完成后访问它,但我不确定从何处开始以安全的方式 谢谢你提供的任何建议 我目前正在使用OpenNI作为kinect驱动程序/api,SlimDX作为directX端的渲染。我以前没有使用过

我正在编写一个使用Kinect的C#应用程序,目前我正在将输出写入着色器资源并将其渲染为纹理,我的问题是Kinect(显然)仅以30fps的速度运行,因此它严重限制了我的性能

克服这一问题的最佳方法是多线程吗? 是否有某种设计模式可以帮助解决此类问题? 据我所知,我可能希望kinect处理线程上的数据,然后在处理完成后访问它,但我不确定从何处开始以安全的方式

谢谢你提供的任何建议


我目前正在使用OpenNI作为kinect驱动程序/api,SlimDX作为directX端的渲染。

我以前没有使用过kinect,您也没有指定要使用的驱动程序/包装器,但我怀疑这可能无关紧要

您可能需要执行以下操作:

  • 将Kinect的“更新”周期分离到它自己的线程上。这将使您的应用程序逻辑可以自由地以尽可能快的速度运行,而无需等待kinect硬件的更新
  • 当kinect填充新数据时,您需要在每次传递时“锁定”图像/深度数据
  • 如果Kinect填充数据的过程需要两段时间,如果驱动程序还没有这样做,您可以尝试缓冲图像和深度数据。这意味着只需在内存中保存两个副本,并在写入另一个副本时读取其中一个副本

  • 关于c#中线程的优秀教程,我始终推荐。我还建议,如果您想要更多关于如何加快应用程序速度的具体信息,您可能应该编辑您的问题,并添加详细信息,具体说明您现在是如何构建的以及您正在使用的包装器/驱动程序,等等。

    任何需要高性能的Kinect开发都应该使用池模型,而不是事件模型。作为补充,您最好的选择是打开一个线程并执行池操作。 您可以在事件模型中使用太多线程,以进行长时间操作,而不是冻结用户界面


    您可以看到:

    我没有使用Kinect的经验,但是如果处理数据需要花费大量时间,那么数据应该在单独的线程上处理,而不是在UI线程上处理。你可以试试。谢谢你的回复,当我实现这一点时,我会抛出一些代码说明我所做的事情,以防其他人遇到这个问题。