• 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

  • 相关阅读:
    02_5if switch分支与循环语句
    02_4运算符
    02_3程序格式
    Shell脚本调用ftp上传文件
    02_2数据类型转换
    02_1标识符_关键字_数据类型
    01_3Java Application初步
    01_2Java开发环境的下载 安装 配置
    Mac 安装MySQL
    用 Homebrew 带飞你的 Mac
  • 原文地址:https://www.cnblogs.com/Jaysonhome/p/13798439.html
Copyright © 2020-2023  润新知