是否发出 `onCompleted()` 的性能影响

Performance implication of emitting `onCompleted()` or not

我有这样的东西。

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));

如您所见,onCompleted() 永远不会发出。如果我制作了一堆这些并且失去了对它们的处理,它们就会被垃圾收集起来就好了。

我在决定是否应该添加这一行:

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

据我所知,这只是添加了另一个需要进行 GC 处理的匿名 class,这看起来不太划算。我在想这个对吗?发射 onCompleted() 有什么我遗漏的优点吗?

我看不出在这种情况下调用 onCompleted 有什么好处。如果您的 observable 使用了一些资源,一旦您完成了 observable,那么我会说您应该传递一个终止事件或取消订阅。

如果您想在这些情况下保持安全,通常我会取消订阅您订阅的 Subscriber 实例(创建一个实例并保留对它的引用,以便您可以调用 subscriber.unsubscribe())。