2016-05-27 3 views
1

Ich habe so etwas.Leistungsimplikation der Ausgabe von `onCompleted()` oder nicht

Button button = new Button(parent, SWT.PUSH); 
PublishSubject<Event> subject = PublishSubject.create(); 
button.addListener(SWT.Selection, e -> subject.onNext(e)); 
subject.subscribe(e -> System.out.println("selection=" + e)); 

Wie Sie sehen können, wird onCompleted() nie emittiert. Wenn ich ein paar davon mache und meine Handle an sie verliere, werden sie einfach Müll gesammelt.

ich entscheiden, ob ich diese Zeile hinzufügen sollten:

button.addListener(SWT.Dispose, e -> subject.onCompleted()); 

Wie am besten ich sagen kann, dies fügt nur noch eine weitere anonyme Klasse, die GC'ed werden muss, die wie ein schlechtes Geschäft zu sein scheint. Denke ich über dieses Recht nach? Irgendwelche Vorteile zu emittieren onCompleted(), dass ich vermisse?

Antwort

1

Ich sehe keine Vorteile zu Anruf onCompleted in diesem Fall. Wenn Ihr Observable eine Ressource verwendet hat, die benötigt wurde, nachdem Sie mit dem Observable fertig waren, dann würde ich sagen, dass Sie eine beendende Veranstaltung passieren oder sich abmelden sollten.

Wenn Sie in diesen Fällen in der Regel sicher sein wollten, würde ich die von Ihnen abonnierte Subscriber Instanz abbestellen (erstellen Sie eine und halten Sie einen Verweis darauf, so dass Sie subscriber.unsubscribe() anrufen können).

+0

Danke für den Eingang Dave :) –