Jal*_*aid 4 c# multithreading garbage-collection
如果我们在方法范围而不是类范围声明一个线程,它会对垃圾收集器产生任何影响,例如:
//scenario 1
public class Foo
{
public Foo()
{
new Thread(()=> /*engine*/) { IsBackground = true }.Start();
}
}
//scenario 2
public class Bar
{
private readonly Thread _engineThread = null;
public Bar()
{
_engineThread = new Thread(()=> /*engine*/) { IsBackground = true };
_engineThread.Start();
}
}
Run Code Online (Sandbox Code Playgroud)
是 - 在第一种方法中,Thread一旦底层线程完成,该对象就有资格进行垃圾收集.
在第二种方法中,如果实例Bar仍然不符合垃圾收集的条件,那将阻止Thread对象被垃圾收集.我怀疑这会对底层操作系统线程产生任何影响,请注意.
我不会考虑GC的含义 - 我会专注于可读性.出于某种原因,您是否需要引用该后台线程?如果是这样,请使用第二种方法,以便您可以使用它.如果你没有需要它,它就会有它作为一个字段是无意义的.
| 归档时间: |
|
| 查看次数: |
472 次 |
| 最近记录: |