使用.NET对象创建的闭包永远不会被清除。

我正在一个 C# 应用程序中使用最新版本的 LuaInterface (http://code.google.com/p/luainterface/)。我遇到了一个问题,即 Lua 类未能清理 ObjectTranslator '对象' 和 'objectsBackMap' 字典中的内部引用,导致内存使用量始终增加。

下面的代码示例说明了这个问题:

当匿名函数(local f = ...)创建涉及外部范围中的 .NET 对象的闭包时,问题就会出现。只要 Lua 解释器保持活动状态,我创建的 50 个 DotNetObject 类的实例就永远不会被垃圾收集,即使在 Lua 中强制使用 GC。

在 MyClass.StoreFunction 中手动处理 LuaFunction (function.Dispose()) 对象可以解决问题,但这并不理想,因为在我的实际应用程序中,我不知道 Function 何时会执行-或者它是否会执行。强制我处理 LuaFunction 改变了整个应用程序的架构,使我基本上需要通过处理包含 LuaFunction 的对象以及包含该对象的对象一直到链的顶部来进行手动内存管理。

那么,这是 LuaInterface 中的错误,还是我错误地使用了库?任何建议都将不胜感激,谢谢!

点赞