丿空sora丿 2021-02-24 16:13 采纳率: 0%
浏览 409

try to dispose a LuaEnv with C# callback!

luaEnv.DoString("require 'xxxx'");
Action act1 = luaEnv.Global.Get<Action>("add");
act1();
act1 = null;
luaEnv.Dispose();

为什么act1=null了
还是会报这个错误

  • 写回答

2条回答 默认 最新

  • levosam 2021-05-31 16:16
    关注

    我已经找到答案了,是因为C#的GC回收机制导致的,因为实在同一帧,所以即使写了act1 = null;但是并不是真的被释放了,你可以这样写:

        [XLua.CSharpCallLua]
        public delegate double LuaMax(double a, double b);
    
        private XLua.LuaEnv luaEnv = null;
    
        void Start()
        {
            luaEnv = new XLua.LuaEnv();
            luaEnv.DoString("CS.UnityEngine.Debug.Log('hello world')");
            //luaenv.dispose();  不要写在这里
            LuaMax max = luaEnv.Global.GetInPath<LuaMax>("math.max");
            Debug.Log("max:" + max(32, 12));
            max = null;
        }
    
        private void OnDisable()
        {
            if (luaEnv != null)
            {
                luaEnv.Dispose();
                luaEnv = null;
            }
        }
    评论

报告相同问题?

悬赏问题

  • ¥15 luckysheet
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误