cocos2d+lua绑定关系理解——性能优化建议

本文探讨了在Cocos2d+Lua环境中如何提升性能,包括将全局变量local化以减少全局表检索,有效利用upvalue提升查找效率,复用表以降低垃圾回收压力,优化C++调用Lua的方式,谨慎处理全局表和变量以避免不必要的ReHash,以及合理管理tolua方法绑定和lua函数引用,确保资源得到及时释放。
摘要由CSDN通过智能技术生成

1 全局变量local化

在lua中使用全局变量都会在全局表(_G)中进行检索,一个函数如果多次使用同一个全局变量应该将其local化存于函数栈中。

例如 local cc = cc,后面关于cc的调用会直接在函数栈中直接获取cc表,省去了检索全局表的操作。包括lua提供的库函数例如

local tableinsert = table.insert

 

2 善用upvalue

updatevalue是lua函数中使用的外部非全局变量,lua函数在查找一个变量的的查找顺序是函数栈、upvalue、全局表。upvalue可以起到成员保护的作用,而且具有很好的性能。但是update是和其使用的函数绑定的,使用的时候要特别注意生命周期的问题。例如我们可以这样定义一个模块

local t = {}
local iCount = 0
function t:Add(value)
    iCount = iCount+value
end

return t

 

3 复用表减少gc压力

lua的gc是一个非常耗时耗力的操作,所以程序中要尽量减少临时表的创建,尽量复用已经不用的表。

 

4 使用lua_ref优化c++调用lua

c++调lua比lua调c++开销要大的多,executeFunctionByHandler接口每次都要传入字符串查找函数表,再到函数表中获取函数,字符串操作是lua中开销比较大的操作,使用lua_getref直接获取函数性能会好很多。

 

5 谨慎创

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值