Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ScenerEnder中的Kotlin内联函数_Android_Kotlin_Opengl Es - Fatal编程技术网

Android ScenerEnder中的Kotlin内联函数

Android ScenerEnder中的Kotlin内联函数,android,kotlin,opengl-es,Android,Kotlin,Opengl Es,如果在渲染循环中使用内联函数,会有任何性能优势吗 class SceneRenderer(val f: () -> Unit): GLSurfaceView.Renderer { override fun onSurfaceCreated(glUnused: GL10, config: EGLConfig) { ... } override fun onSurfaceChanged(glUnused: GL10, width: Int, height: Int) { ... }

如果在渲染循环中使用内联函数,会有任何性能优势吗

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()
  ...
}
提前谢谢

TL;博士 或者使用直接函数调用就足够了吗

是的

内联 :

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

您的函数不是高阶函数,因为它位于类
SceneRenderer
中,使其
内联将不会产生合理的影响

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


非常感谢!如果可能的话,澄清问题。如果函数InLink Fun包含更多的行,例如:私有内联的有趣的在线乐趣(f::(-)->单元){F.Cork(…)},那么这里仍然需要内联操作符吗?如果它在类中,不要将其内联。代码行其实并不重要<代码>避免内联大函数
并不是说行的数量,而是说资源和计算的数量。现在我明白了)。谢谢你!