我发现c#/ xna中的渲染目标不会被自动处理掉,你必须调用.dispose()成员去除它们。
我认为垃圾收集是在所有引用都消失之后自动摆脱的东西,是什么给出的?
还有其他什么不能自动处理吗?
答案 0 :(得分:1)
即使使用自动垃圾收集,当您确定不再使用该实例时,仍然可以调用Dispose
。
或使用using
声明。
通过这种方式,您可以选择何时将对象“置于”,而不是等到垃圾收集器执行此操作。
答案 1 :(得分:1)
IDisposable
存在的原因是支持垃圾收集无法[有效]管理对象内存的特殊情况。它存在的主要原因是释放非托管资源。
其中一个常见情况是与非托管内存的交互。当一个对象正在做一些涉及在垃圾收集器范围之外分配内存的东西时,垃圾收集器不能负责清理它;它需要由程序员处理。这些情况下分配大量内存的可能性也更高,因此确保更快地清理内存更为重要。
它还用于对象具有某种“清理”的情况,除了实际释放内存之外,它还需要执行某些操作。例如,处理IO时的文件处理程序,或者应该关闭的数据库的连接。让垃圾收集器释放对象的内存将不会执行这种类型的清理。
在某些情况下,程序员使用IDisposeable
接口“劫持”using
语句的语法,并且实际上并没有在其dispose方法中配置非托管资源。
答案 2 :(得分:0)
我的观点是,如果一个对象有一个Dispose方法,它可能需要被处理掉。我通常会尝试将它放在带有'using'语句的块中。这将在块结束时自动调用Dispose方法。