Skip to main content
 首页 » 编程设计

c#之我应该在线程完成工作后将线程引用显式设置为 null 吗

2024年11月01日18www_RR

我应该在线程完成工作后将线程引用显式设置为 null 还是没有必要?如果我想将它设置为 null,那么我应该在代码的哪个位置执行此操作?

我是否应该使用 thread.isalive 标志检查线程是否存在,如果不存在则将其设置为 null?

请您参考如下方法:

Should i explicitly set thread reference to null after thread completes it's work or it's not necessary?

就我个人而言,我不会打扰。在某些情况下,显式将对象引用设置为 null 确实很重要。无论类型如何,这些案例都是:

  • 如果变量是静态成员,它引用的对象占用内存大。
  • 如果变量是一个实例成员,包含在一个生命周期较长的对象中,该对象引用一个消耗大量内存的对象。
  • 如果变量是引用消耗大量内存的对象的长时间运行方法的局部变量。1

这些是我能想到的。也许还有更多,但可能不多。这里的共同点是变量引用了一个消耗大量内存的对象。托管 Thread 对象本身不会消耗大量内存,所以我无法想象将 Thread 类型的变量设置为 null 会为您完成很多工作不管它是如何使用的。大多数资源在线程启动时分配,然后在线程结束时释放。

Should i check if thread is alive or not using thread.isalive flag and then set it to null if it's not alive.

我更喜欢使用Thread.Join 来测试和等待一个线程的完成。事实上,我从未Thread.IsAlive 用于任何有用的...曾经。


1如果 GC 检测到引用不再被使用,它实际上足够聪明,可以在方法结束之前处理本地对象引用。