Область создания потоков и сборщик мусора - PullRequest
4 голосов
/ 20 июня 2011

Имеет ли это какое-то значение для сборщика мусора, если мы объявляем поток в области метода, а не в области класса, например:

//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();
    }
}

1 Ответ

5 голосов
/ 20 июня 2011

Да - в первом подходе объект Thread будет иметь право на сборку мусора, как только основной поток завершит работу.

Во втором подходе, если экземпляр Bar все еще не подходит для сборки мусора, что предотвратит сборку мусора для объекта Thread.Я сомневаюсь, что это окажет какое-либо влияние на основной поток ОС, заметьте.

Я бы не стал думать о последствиях GC - я бы сконцентрировался на удобочитаемости.Вам нужна ссылка на этот фоновый поток по какой-то причине?Если это так, воспользуйтесь вторым подходом, чтобы он был доступен для вас.Если вам не это нужно, было бы бессмысленно иметь это как поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...