是否发出 `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()
)。
我有这样的东西。
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()
)。