Closed ohsorry closed 5 years ago
请提供一个可复现的例子
这是我新建的一个工程。 之前的测试碰撞、绘图都OK,就是这个对象池有问题。
已更新,请pull最新代码测试一下
不报错了,但是你把析构的链给注释掉了,这样行吗
等我有时间给你提交代码啊。 可以按参考实现:IDisposable
@ohsorry 在Dispose回收即可,析构只应释放非托管资源,这里是之前没考虑全才加进去的,删掉不影响。
用了对象池不就相当于用了非托管资源吗,析构里调用Dispose()还是必要的。这样忘了手动Dispose(),可复用对象也能被回收。现在貌似只影响BroadPhase、DynamicTree。
新建了一个winform工程测试了下Box2DSharp。 关闭窗体退出程序就会报这个错:
System.ObjectDisposedException HResult=0x80131622 Message=无法访问已释放的对象。 ObjectDisposed_ObjectName_Name Source=mscorlib StackTrace: 在 System.Threading.ThreadLocal
1.GetValueSlow() 在 System.Threading.ThreadLocal
1.get_Value() 在 System.Collections.Concurrent.ConcurrentBag1.GetThreadList(Boolean forceCreate) 在 System.Collections.Concurrent.ConcurrentBag
1.Add(T item) 在 Box2DSharp.Common.SimpleObjectPool1.Return(IEnumerable
1 items) 在 D:\Pro2019\Box2DSharpPlay\Box2DSharp\Common\ObjectPool.cs 中: 第 88 行 在 Box2DSharp.Collision.DynamicTree.Dispose() 在 D:\Pro2019\Box2DSharpPlay\Box2DSharp\Collision\DynamicTree.cs 中: 第 69 行 在 Box2DSharp.Collision.DynamicTree.Finalize() 在 D:\Pro2019\Box2DSharpPlay\Box2DSharp\Collision\DynamicTree.cs 中: 第 56 行====================== 代码就new 了一个World,添加了几个body,什么都没做。 退出前手动world.Dispose()也不行。