XLua交互过程中类型传递优化
1. 为什么要优化?
lua与C#的类型不能直接兼容,传递过程中,兼容性转化会带来一定的转化开销,主要是内存频繁申请。
2. C#对象类型优化
将所有交互中的对象存放到一个object_pool里,将当前对象的索引映射到lua的userdata,这样传递时,只需要传递索引就OK,C#侧根据索引找到对应的对象
3. C#复杂值类型struct优化
a.复杂值类型,比如Vector3这样的,也可以采用2的方式优化,但这样也会涉及到拆装箱的问题,因为object_pool里存放的是object
总结:解决了部分传递转化的开销,但依然有拆装箱开销
b.一种方法是在lua侧实现一个lua版的Vector3,这样的话,C#2lua只传xyz,在lua侧构建一个luaVector3,lua2C#,也只传xyz,在C#侧构建一个Vector3
总结:解决了拆装箱问题,但是得在lua侧,针对每个复杂值类型实现一套lua版,麻烦
c.xlua方法,值拷贝:C#2lua, 把struct的值拷贝到lua的userdata中; lua2C#,把userdata中的解出来
总结:既避免了拆装箱,又处理起来通用性强,lua方面也省些内存,但函数执行效率并不是很高(函数调用涉及lua-C-C#)
4. Xlua交互优化可参考PackUnpack(struct优化),ObjectTranslator(object优化)两个类