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優化)兩個類