S K*_*S K 8 c# garbage-collection dispose
我想知道在调用Dispose()方法时执行了什么操作.Object在Dispose()调用或Dispose()上快速释放所有资源,标记Object已准备好进行垃圾回收.当我们将Object引用设置为NULL时发生了什么.实际上我在.NET 2.0中有Windows表单应用程序.并且我希望在经过一定时间后调用垃圾收集器(例如5分钟后)以收集所有未引用的对象.
Tim*_*son 10
Dispose通常释放对象拥有的非托管资源.调用Dispose不会触发垃圾回收; 当您的对象不再引用它时,就会收集它,就像您从未调用过一样Dispose.
将对象引用设置为null仅导致该引用不再指向该对象; 你通常不需要这样做(例如,你几乎不需要设置局部变量null).
您自己也几乎不需要自己触发垃圾回收.您是否看到一个问题,表明您需要每5分钟运行一次垃圾收集,而不是在运行时选择的时候?
Dispose方法没有什么神奇之处,就像任何其他方法一样.调用Dispose方法不会在后台进行任何清理或更改对象的状态,它只会执行您在方法中放置的内容.它的特殊之处在于它在IDisposable接口中定义,因此它是告诉对象清理其资源的标准方法.
在Dispose方法中,对象应该处理所有非托管资源,例如数据库连接和Font对象.
释放对象时,您不必担心任何托管资源.类似于字节数组的结构完全由垃圾收集器处理,您可以在放开时将其保留在对象中.您不需要设置任何引用null,当您不再使用对象时,垃圾收集器将找到删除它及其引用的任何对象的最佳时间.
当你不管它时,垃圾收集器通常效果最好,没有必要在收集未使用的对象时告诉它.当它应该完成时它会自己弄明白,并且通常它会比你更好,因为它可以访问大量有关内存状态和代码所没有的机器状态的信息.
您可能会觉得应该尽量减少内存使用量,但这本身并没有优势.计算机不能更好地工作,因为它有更多的可用内存.相反,如果你的代码试图进行清理,或强迫垃圾收集器做任何事情,那么当它应该忙于做更重要的事情时,它正在进行清理.如果需要,垃圾收集器将清理未使用的对象.