Ich bin derzeit mit dem Reactive Extensions-Framework für .NET vertraut und arbeite mich durch die verschiedenen Einführungsressourcen, die ich gefunden habe (hauptsächlich http://www.introtorx.com ).
Unsere Anwendung umfasst eine Reihe von Hardwareschnittstellen, die Netzwerkrahmen erkennen. Dies sind meine IObservables. Ich habe dann eine Vielzahl von Komponenten, die diese Rahmen verbrauchen oder eine Art Transformation für die Daten durchführen und einen neuen Rahmentyp erzeugen. Es wird auch andere Komponenten geben, die beispielsweise jeden n-ten Frame anzeigen müssen. Ich bin überzeugt, dass Rx für unsere Anwendung nützlich sein wird, habe jedoch Probleme mit den Implementierungsdetails für die IObserver-Schnittstelle.
Die meisten (wenn nicht alle) Ressourcen, die ich gelesen habe, haben gesagt, dass ich die IObservable-Schnittstelle nicht selbst implementieren sollte, sondern eine der bereitgestellten Funktionen oder Klassen verwenden sollte. Aus meiner Forschung geht hervor, dass das Erstellen eines Subject<IBaseFrame>
mir das bietet, was ich brauche. Ich hätte meinen einzelnen Thread, der Daten von der Hardwareschnittstelle liest und dann die OnNext-Funktion meiner Subject<IBaseFrame>
Instanz aufruft . Die verschiedenen IObserver-Komponenten würden dann ihre Benachrichtigungen von diesem Betreff erhalten.
Meine Verwirrung ergibt sich aus den Ratschlägen im Anhang dieses Tutorials, in denen es heißt:
Vermeiden Sie die Verwendung der Betreffarten. Rx ist effektiv ein funktionales Programmierparadigma. Die Verwendung von Subjekten bedeutet, dass wir jetzt den Status verwalten, der möglicherweise mutiert. Es ist sehr schwierig, sich gleichzeitig mit dem Mutationsstatus und der asynchronen Programmierung zu befassen. Darüber hinaus wurden viele der Operatoren (Erweiterungsmethoden) sorgfältig geschrieben, um sicherzustellen, dass die korrekte und konsistente Lebensdauer von Abonnements und Sequenzen erhalten bleibt. Wenn Sie Themen einführen, können Sie dies unterbrechen. In zukünftigen Versionen kann es auch zu erheblichen Leistungseinbußen kommen, wenn Sie explizit Themen verwenden.
Meine Anwendung ist sehr leistungskritisch. Ich werde natürlich die Leistung der Verwendung der Empfangsmuster testen, bevor sie in den Produktionscode eingeht. Ich mache mir jedoch Sorgen, dass ich mit der Subject-Klasse etwas tue, das gegen den Geist des Rx-Frameworks verstößt, und dass eine zukünftige Version des Frameworks die Leistung beeinträchtigen wird.
Gibt es eine bessere Möglichkeit, das zu tun, was ich will? Der Hardware-Polling-Thread wird kontinuierlich ausgeführt, unabhängig davon, ob Beobachter vorhanden sind oder nicht (der HW-Puffer wird ansonsten gesichert). Dies ist also eine sehr heiße Sequenz. Ich muss dann die empfangenen Frames an mehrere Beobachter weitergeben.
Jeder Rat wäre sehr dankbar.