Je suis actuellement en train de me familiariser avec le framework Reactive Extensions pour .NET et je suis en train de parcourir les différentes ressources d'introduction que j'ai trouvées (principalement http://www.introtorx.com )
Notre application implique un certain nombre d'interfaces matérielles qui détectent les trames réseau, ce seront mes IObservables, j'ai alors une variété de composants qui consommeront ces trames ou effectueront une certaine manière de transformer les données et de produire un nouveau type de trame. Il y aura également d'autres composants qui doivent afficher chaque nième image par exemple. Je suis convaincu que Rx va être utile pour notre application, mais j'ai du mal avec les détails d'implémentation de l'interface IObserver.
La plupart (sinon la totalité) des ressources que j'ai lues ont dit que je ne devrais pas implémenter l'interface IObservable moi-même mais utiliser l'une des fonctions ou classes fournies. D'après mes recherches, il semble que la création d'un Subject<IBaseFrame>
me fournirait ce dont j'ai besoin, j'aurais mon thread unique qui lit les données de l'interface matérielle, puis appelle la fonction OnNext de mon Subject<IBaseFrame>
instance. Les différents composants IObserver recevraient alors leurs notifications de ce sujet.
Ma confusion vient des conseils donnés en annexe de ce tutoriel où il est dit:
Évitez d'utiliser les types de sujet. Rx est en fait un paradigme de programmation fonctionnel. Utiliser des sujets signifie que nous gérons maintenant l'état, qui est potentiellement en train de muter. Il est très difficile de gérer à la fois l'état mutant et la programmation asynchrone. De plus, de nombreux opérateurs (méthodes d'extension) ont été soigneusement écrits pour garantir que la durée de vie correcte et cohérente des abonnements et des séquences est maintenue; lorsque vous introduisez des sujets, vous pouvez rompre cela. Les versions futures peuvent également voir une dégradation significative des performances si vous utilisez explicitement des sujets.
Mon application est assez critique pour les performances, je vais évidemment tester les performances de l'utilisation des modèles Rx avant d'entrer dans le code de production; cependant, je crains de faire quelque chose qui va à l'encontre de l'esprit du framework Rx en utilisant la classe Subject et qu'une future version du framework va nuire aux performances.
Existe-t-il une meilleure façon de faire ce que je veux? Le thread d'interrogation matériel va fonctionner en continu, qu'il y ait des observateurs ou non (le tampon matériel sauvegardera autrement), c'est donc une séquence très chaude. Je dois ensuite transmettre les trames reçues à plusieurs observateurs.
Tout avis serait grandement apprécié.