找回密码
 立即注册
查看: 243|回复: 0

xLua 多次Dispose问题

[复制链接]
发表于 2021-8-10 13:46 | 显示全部楼层 |阅读模式
问题

由于lua脚本更新等原因。需要把xlua的evn给释放掉,然后再重新创建并加载lua代码。所以会有在一次运行周期内多次创建并释放evn的需求。然后问题就出现了,在第二次以上释放的时候会报:
System.InvalidOperationException: try to dispose a LuaEnv with C# callback!
  at XLua.LuaEnv.Dispose (Boolean dispose) [0x0002d] in D:\work\client\Assets\ThirdParty\XLua\Src\LuaEnv.cs:412
  at XLua.LuaEnv.Dispose () [0x00013] 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时已经完成相关化代理的释放工作。作者给了另一种解决方案,就是把清理代理的过程再用一个函数包一下,多调用几层。这样就不会有问题了。  问题详情.
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 04:23 , Processed in 0.094519 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表