如果在渲染循环中使用内联函数,是否会带来性能优势?
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()
...
}
提前感谢!
或者使用直接函数调用是否足够?
是,是。
使用高阶函数会产生某些运行时惩罚:每个函数是一个对象,它捕获一个闭包,即那些变量在函数主体中访问的文件。内存分配(用于函数对象和类)和虚拟调用介绍运行时开销。
您的函数不是高阶的,因为它位于类SceneRenderer
中,并且将其设为inline
也不会产生合理的影响。
内联可能导致生成的代码增长;但是,如果我们这样做合理的方式(即避免内联大型函数),它将付出性能下降,尤其是在内部的“大型”呼叫站点循环。