Şu anda .NET için Reactive Extensions çerçevesini kavramaya başladım ve bulduğum çeşitli giriş kaynakları (esas olarak http://www.introtorx.com ) üzerinde çalışıyorum.
Uygulamamız, ağ çerçevelerini algılayan bir dizi donanım arabirimini içerir, bunlar benim IObservable'larım olacak, daha sonra bu çerçeveleri tüketecek veya veriler üzerinde bir şekilde dönüşüm gerçekleştirecek ve yeni bir çerçeve türü üretecek çeşitli bileşenlere sahibim. Örneğin, her n'inci kareyi görüntülemesi gereken başka bileşenler de olacaktır. Rx'in uygulamamız için yararlı olacağına ikna oldum, ancak IObserver arayüzü için uygulama ayrıntılarıyla uğraşıyorum.
Okuduğum kaynakların çoğu (hepsi değilse de), IObservable arayüzünü kendim uygulamamam gerektiğini, ancak sağlanan işlevlerden veya sınıflardan birini kullanmam gerektiğini söyledi. Araştırmamdan, bir oluşturmanın Subject<IBaseFrame>
bana ihtiyacım olan şeyi sağlayacağı anlaşılıyor, donanım arayüzünden verileri okuyan ve ardından örneğimin OnNext işlevini çağıran tek iş parçacığıma sahip olacaktım Subject<IBaseFrame>
. Farklı IObserver bileşenleri daha sonra bildirimlerini bu Konudan alacaktır.
Benim kafa karışıklığım, bu öğreticinin ekinde verilen tavsiyeden geliyor :
Konu türlerini kullanmaktan kaçının. Rx, etkili bir şekilde işlevsel bir programlama paradigmasıdır. Özneleri kullanmak, şu anda potansiyel olarak mutasyona uğrayan durumu yönettiğimiz anlamına gelir. Aynı anda hem mutasyon durumu hem de eşzamansız programlama ile uğraşmak çok zor. Ayrıca, aboneliklerin ve dizilerin doğru ve tutarlı yaşam süresinin korunmasını sağlamak için operatörlerin çoğu (uzatma yöntemleri) dikkatlice yazılmıştır; konuları tanıttığınızda, bunu kırabilirsiniz. Nesneleri açıkça kullanırsanız gelecekteki sürümler de önemli performans düşüşü görebilir.
Benim uygulamam performans açısından oldukça kritik, açıkçası üretim koduna girmeden önce Rx modellerini kullanmanın performansını test edeceğim; ancak Subject sınıfını kullanarak Rx çerçevesinin ruhuna aykırı bir şey yaptığımdan ve çerçevenin gelecekteki bir sürümünün performansa zarar vereceğinden endişeleniyorum.
İstediğimi yapmanın daha iyi bir yolu var mı? Herhangi bir gözlemci olsa da olmasa da, donanım yoklama iş parçacığı sürekli olarak çalışacaktır (HW tamponu aksi takdirde yedekleyecektir), bu nedenle bu çok sıcak bir dizidir. Daha sonra alınan çerçeveleri birden fazla gözlemciye iletmem gerekiyor.
Herhangi bir tavsiye çok takdir edilecektir.