我的问题是关于操作成本,特别是Kotlin数据类copy()
操作和RxJava observeOn()
线程切换的成本。
我有一个系统可以生成事件,比如说Schedulers.mainThread
。事件是Kotlin数据类。接下来是业务逻辑,最后,链由copy()
操作生成新的数据类。所有结果都必须在Schedulers.mainThread
上消耗。所以,链条看起来像这样:
eventSource() //Events are produced on Schedulers.mainThread
.observeOn(Schedulers.computation)
.map { event ->
other business logic
event.copy(...)
}
.observeOn(Schedulers.mainThread)
.subscribe(eventConsumer)
因此,如果事件类允许说15个字段,那么问题是由observeOn
为copy()
这样的操作切换调度程序。应该提到的是,Schedulers.mainThread
是用于呈现UI的线程,并且最好尽可能地空置。
copy
只使用默认参数调用数据类构造函数,用于那些尚未传递的参数,即
event.copy(field3 = "")
是相同的
Event(event.field1, event.field2, "", event.field4, ...)
本身不太可能值得切换调度程序,但当然“其他业务逻辑”可能是,如果你有
event.copy(field3 = complexCalculation())
你需要考虑complexCalculation()
的成本。