C# 我应该通过将哈希表或字符串等对象设置为null来处理它吗?

C# 我应该通过将哈希表或字符串等对象设置为null来处理它吗?,c#,C#,我有一个接受字符串的哈希表。处理它们的最佳方法是什么? 在使用哈希表之后,我是否应该调用clear,然后将对象设置为null? 或者仅仅将哈希表对象设置为null就足够了 HashTable没有实现IDisposable,因此您不能对其调用Dispose,您可以将对象null分配给并让垃圾收集器处理它。您无法预测垃圾收集器将在何时收集垃圾,尽管您可以使用GC.Collect强制垃圾收集器,但不建议这样做 你可以看到: 除此之外,您还可以研究哈希表的通用实现 其他人建议什么都不要做,这基本上是正确

我有一个接受字符串的哈希表。处理它们的最佳方法是什么? 在使用哈希表之后,我是否应该调用clear,然后将对象设置为null?
或者仅仅将哈希表对象设置为null就足够了

HashTable
没有实现
IDisposable
,因此您不能对其调用
Dispose
,您可以将对象
null
分配给并让垃圾收集器处理它。您无法预测垃圾收集器将在何时收集垃圾,尽管您可以使用
GC.Collect
强制垃圾收集器,但不建议这样做

你可以看到:


除此之外,您还可以研究
哈希表的通用实现

其他人建议什么都不要做,这基本上是正确的。在经典的C#意义上,您无法处理它,将其设置为null也应该是不必要的。如果您允许,垃圾收集器将完成其工作

那就随它去吧

我要提供的一条建议可以帮助您让垃圾收集器完成它的工作,就是将对象的生存期限制在不超过您需要的时间。如果对象只需要为方法调用而存在,那么将变量的范围和基础对象的生存期限制在该方法中,不要将其提升到可能存在更长时间的类成员中。如果该类成员在任意长的时间内停留,那么该成员国将与之一起生活


声明变量并在需要的位置实例化对象,并且仅在需要的位置实例化对象,并相信垃圾回收器会在完成后的某个时间回收该内存。

将变量设置为null并不能保证它会被垃圾回收。如果其他变量引用同一对象,则在引用计数变为零之前,将不会收集相关对象


限制对象的范围会有所帮助,因为在对象超出范围后,对象更有可能被收集。对于文件句柄等非垃圾收集处理的项目,实现idisposable确实更有意义。

如果您什么都不做,垃圾收集器将为您完成垃圾收集GC可能需要数小时才能运行。如果您有一个特别大的字典,是否值得在Dispose()函数中调用Clear()方法?我一直都是这么做的。