2013-02-20 26 views
0

我有一个需要字符串的哈希表。处置它们的最佳方式是什么? 使用哈希表后,我应该调用清除,然后将对象设置为空? 或者只是将哈希表对象设置为null就足够了?我是否应该通过将对象设置为null来处理Hashtable或字符串等对象?

+3

你只是什么也不做,垃圾收集器会为你做它 – 2013-02-20 05:05:45

+0

GC则需要数小时才能运行。如果你有一个特别大的字典,是否值得在Dispose()函数中调用Clear()方法?这就是我一直所做的。 – Brain2000 2015-07-15 18:33:24

回答

0

HashTable没有实现IDisposable所以你不能把它Dispose,您可以指定对象null让垃圾回收利用它照顾。您无法预测垃圾回收器何时收集垃圾回收器,尽管您可以强制垃圾回收器使用GC.Collect但不推荐使用垃圾回收器。

您可能会看到:Fundamentals of Garbage Collection

除了这个,你可以看看Dictionary<TKey, TValue> Class这是通用实现HashTable的。

1

其他人建议不要做任何事情,这是大多数情况。你不能在经典的C#术语中处理它,并且将它设置为空也应该是不必要的。如果你愿意的话,垃圾收集器将会完成它的工作。

所以让它。

我必须提供的一条建议可以帮助您让垃圾收集器完成其工作,将对象的生命周期限制为不超过您的需要。如果对象只需要为方法调用而生存,那么将变量的范围和底层对象的生命周期限制为该方法,不要将其提升为可能寿命更长的类成员。如果班级长时间滞留,该成员国就会与之一起生活。

声明变量和实例在你需要它的对象,只有在你需要它,并相信,垃圾收集器会回收内存在某些时候你是通过后。

1

设置一个变量设置为null将不能保证,这将是垃圾收集。如果其他变量引用同一个对象,那么在引用计数变为零之前,将不会收集所讨论的对象。

限制对象的范围也能有所帮助的对象是更可能的对象超出范围,将会被收取。对于那些没有像垃圾收集那样交给文件句柄的项目来说,实现一致性确实更有意义。

相关问题