ToLua
-
1,lua正常銷毀gameObject
ObjectTranslator的數據容器管理GameObject.
lua 創建GameObect時,添加到容器里。
銷毀時,Delay銷毀(解除綁定) -
2,C#銷毀gameObject,lua的處理
如果C#銷毀了GameObject,Lua的LuaObjectPool會解綁null的引用。(LateUpdate里 StepCollect)
C#
- 場景加載完成,調用 C#和Lua的GC回收。
目前推薦做法
-
問題:
1,Unity銷毀gameObject,tolua的ObjectTranslator.objects會持有。(內存泄漏)
2,userData創建比較耗。 -
處理:
1,C#用創建和管理gameObject,和Lua使用Int類型來交互。 避免Lua創建gameObject帶來的消耗,和內存管理難題。
2,如果通過wrap 創建go,必須調用wrap的Destroy。且lua變量=nil
3,Delegate和1同理,都是使用Int等基礎類型交互(或者List)
干貨 引
- tolua 中有一些關鍵點:
C# 給Lua用的對象為了保持它的存活tolua使用了一個 **ObjectTranslator **來為它們建立引用以保障不被垃圾回收. Lua 給C#中使用回調函數之類會集中在 funcRefMap / delegateMap 中.以保持引用數據不被Lua回收
那么只要這些地方的引用計數在維護過程中出現問題就會導致內存資源被持續持有
- lua profiler
插件 LuaMemorySnapshotDump.
干貨
https://blog.csdn.net/Game_jqd/article/details/64480614?utm_source=blogxgwz3