我是否应该通过将对象(如哈希表)或字符串设置为 null 来释放它

本文关键字:设置 字符串 null 释放 哈希表 是否 对象 | 更新日期: 2023-09-27 18:00:08

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

我是否应该通过将对象(如哈希表)或字符串设置为 null 来释放它

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

所以顺其自然吧。

我必须提供的一条建议可以帮助您让垃圾回收器完成其工作,将对象的生存期限制为不超过您需要的时间。如果对象只需要生存于方法调用,则将变量的范围和基础对象的生存期限制为该方法,不要将其提升到可能生存更长时间的类成员。如果这个阶级坚持任意长的时间,那么这个成员国就会随之而来。

声明变量并在您需要它的地方实例化对象,

并且仅在您需要它的地方实例化对象,并相信垃圾回收器会在您完成后的某个时间点回收该内存。

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

限制对象的作用域会有所帮助,因为在对象超出范围后更有可能收集对象。对于不是由垃圾回收(如文件句柄(传递的项目,实现 idisposable 确实更有意义。

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

您可能会看到: 垃圾回收基础知识

除此之外,您还可以查看Dictionary<TKey, TValue> Class这是HashTable的通用实现。