SceneRenderer中的Kotlin内联函数

问题描述 投票:1回答:1

如果在渲染循环中使用内联函数,是否会带来性能优势?

class SceneRenderer(val f: () -> Unit): GLSurfaceView.Renderer {
  override fun onSurfaceCreated(glUnused: GL10, config: EGLConfig) { ... }

  override fun onSurfaceChanged(glUnused: GL10, width: Int, height: Int) { ... }

  override fun onDrawFrame(glUnused: GL10) {
    ...
    inlineFun(f)
    ...
  }

  private inline fun inlineFun(f: () -> Unit) {
    f.invoke()
  }
}

或者使用直接函数调用是否足够?

override fun onDrawFrame(glUnused: GL10) {
  ...
  f.invoke()
  ...
}

提前感谢!

android kotlin opengl-es
1个回答
0
投票

TL; DR

或者使用直接函数调用是否足够?

是,是。

内联

Kotlinlang

使用高阶函数会产生某些运行时惩罚:每个函数是一个对象,它捕获一个闭包,即那些变量在函数主体中访问的文件。内存分配(用于函数对象和类)和虚拟调用介绍运行时开销。

您的函数不是高阶的,因为它位于类SceneRenderer中,并且将其设为inline也不会产生合理的影响。

内联可能导致生成的代码增长;但是,如果我们这样做合理的方式(即避免内联大型函数),它将付出性能下降,尤其是在内部的“大型”呼叫站点循环。

© www.soinside.com 2019 - 2024. All rights reserved.