ainatipen 发表于 2021-8-10 13:46

xLua 多次Dispose问题

问题

由于lua脚本更新等原因。需要把xlua的evn给释放掉,然后再重新创建并加载lua代码。所以会有在一次运行周期内多次创建并释放evn的需求。然后问题就出现了,在第二次以上释放的时候会报:
System.InvalidOperationException: try to dispose a LuaEnv with C# callback!
at XLua.LuaEnv.Dispose (Boolean dispose) in D:\work\client\Assets\ThirdParty\XLua\Src\LuaEnv.cs:412
at XLua.LuaEnv.Dispose () in D:\work\client\Assets\ThirdParty\XLua\Src\LuaEnv.cs:395再三确认,在调用LuaEnv.Dispose之前的确已经把所有会被lua注册的代理清理干净了。而且第一次dipose并不会报错。
解决

经过各种尝试,发现只要在清理代理之后,再调用 LuaEnv.DoString执行任意一点lua代码,比如打个日志什么的,然后才去调 LuaEntry.Dispose 问题就消失了。咨询xlua作者后得到回答是: 清理代理的操作和调LuaEntry.Dispose在同一帧栈,不能保证在evn dispose时已经完成相关化代理的释放工作。作者给了另一种解决方案,就是把清理代理的过程再用一个函数包一下,多调用几层。这样就不会有问题了。问题详情.
页: [1]
查看完整版本: xLua 多次Dispose问题