zoukankan      html  css  js  c++  java
  • ToLua&Unity-内存管理(Userdata和Delegate的GC方案)

    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

  • 相关阅读:
    ASP脚本获取服务器全部参数列表说明
    HTML基础教程
    HTML5代码大全
    CSS 属性大全
    Web前端单词大全
    css常用代码大全
    曾国藩:诚敬静谨恒!
    鼠标经过显示菜单
    月入3000+项目
    右侧菜单显示隐藏
  • 原文地址:https://www.cnblogs.com/Jaysonhome/p/13798439.html
Copyright © 2011-2022 走看看