2011-06-08 39 views
13

Kinect'i kullanan bir C# uygulaması yazıyorum, şu an çıktıyı alıyorum ve bunu bir Shader Resource'a yazıp bir doku olarak yapıyorum, benim sorunum Kinect'in (görünüşte) çalıştığı 30fps'de, bu yüzden performansımı kötü bir şekilde düşürüyor.Kinect ile iş parçacığı

Bunun üstesinden gelmenin en iyi yolu nedir, çoklu mi? Bu tür sorunlarda yardımcı olacak bir çeşit desen var mı? Anlatabildiğim kadarıyla, bir iş parçacığı üzerindeki verileri işlemek için kinect'e sahip olmak isteyebilir ve işlem bittiğinde ona erişebilir, ancak güvenli bir şekilde nereden başlayacağımı bilmiyorum.

Sunduğunuz tavsiyeleriniz için teşekkür ederiz.

Şu anda kinect sürücüleri/api için OpenNI ve doğrudan DirectX tarafı için SlimDX kullanıyorum.

+0

Ben Kinect ile hiçbir deneyime sahip, ancak veriler ayrı UI değil parçacığı üzerinde işlenmiş gerektiğini, sonra veriyi işlemek için zaman önemli miktarda alırsa. [BackgroundWorker Class] 'ı deneyebilirsiniz (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx). – Centro

cevap

8

Daha önce Kinect ile çalışmadım ve hangi sürücüleri/sarıcı kullandığınızı belirtmediniz, ancak büyük olasılıkla önemli olmadığını sanıyorum. o kendi iş parçacığı üzerine Kinect için

  1. Ayrı "Update" döngüsü: muhtemelen yapmanız gerekir Ne

    şudur. Bu, uygulama mantığınızı, kinect donanımından bir güncellemeyi beklemeden durdurulmadan olabildiğince hızlı çalışacak şekilde bırakacaktır.

  2. Kinect yeni veriyi doldururken her geçişte görüntü/derinlik verilerini "kilitlemeniz" gerekir.
  3. Verilerdeki Kinect doldurma işlemi iki uzun sürüyorsa, sürücüler bunu yapmadıysa görüntü ve derinlik verilerini arabelleğe almayı deneyebilirsiniz. Bu, iki kopyayı bellekte tutmak ve diğerini yazarken okumaktır. C# parçacığı üzerinde mükemmel öğreticiler için

, hep Albahari's Threading in C# önerilir. Uygulamanızı hızlandırmak için neler yapabileceğiniz konusunda daha ayrıntılı bilgi edinmek isterseniz, muhtemelen sorunuzu düzenlemeli ve özellikle nasıl yapılandırdığınıza ve hangi sarıcı/sürücünün kullandığınıza, vb. Ilişkin ayrıntılara eklemelisiniz.

+0

Yanıt için teşekkürler, bunu uygularken, başkalarının bu konuya girmesi durumunda ne yaptığımı açıklayacağım. – Craig

1

Kinect ile yüksek performans gerektiren herhangi bir geliştirme, havuz modeli yerine etkinlik modelini kullanmalısınız. Buna ek olarak, en iyi seçeneğiniz bir iş parçacığı açmak ve havuzlama işlemlerini yapmaktır. Uzun model işlemleri yapmak ve kullanıcı arayüzünü dondurmamak için, olay modeliyle fazla iş parçacığı kullanabilirsiniz.

Ve bunu görebilirsiniz: http://msdn.microsoft.com/en-us/library/hh973076

İlgili konular