Kotlin不能内联一些机构
我有一个内联函数接受两个lambda表达式。 这个函数是在我的代码的热点中调用的,尽管它是内联的,但是为这些实体创建了数千个对象。
有趣的是注释,或者用像println
这样简单的调用替换身体,一切都完美。 但由于某种原因,我的具体使用,似乎内联没有做好工作!
我该如何解决这个问题? 与内联体有什么限制? 这是一个错误?
我的用例:
fun PlayerSend.sync() = reusable({ val packet = this it.syncMovement(packet) reusable({ if (it.updateRequired) it.sync(this) }, { packet.bits(8, 0 /* amount of players to update */) if (readable > 0) { packet.bits(11, 2047).byteAccess() + this } else packet.byteAccess() }) }, { ses + 81.byte + readable.short + this })
方法头:
inline fun <R1, R2> reusable(use: ByteBufPacketeer.() -> R1, after: ByteBufPacketeer.() -> R2) { val reusables = Reusables.get() val count = ReuseablesCount.get() ReuseablesCount.set(if (count + 1 >= reusables.size) 0 else count + 1) with(reusables[count]) { use() after() clear() } }