Сборщик "мусора" уничтожает временно не имеющие ссылки объекты во время асинхронных вызовов в.NET?

В этом случае, Булево преобразование isGreaterThanZero= Boolean(zero) является лучшим с точки зрения скорости / производительности, потому что за этим нет логического условия (если ... еще).

А остальные методы условие и преобразование приведения немного медленны из-за своего логического условия (если ... еще).

isGreaterThanZero= zero > 0
isGreaterThanZero= zero ? true : false
9
задан Drew Noakes 20 February 2009 в 14:39
поделиться

5 ответов

Объект считают живым и не имеющим право на сборку "мусора", если живой поток содержит ссылку на него, или если на это ссылаются статически (прямо или косвенно в обоих случаях).

В обоих примерах асинхронный API сохраняет ссылку на Ваш запрос (в пуле потоков, где асинхронный, операции IO поселены), и таким образом, это не будет собрано "мусор", пока это не завершится.

11
ответ дан 4 December 2019 в 13:50
поделиться

Если объект не имеет никаких ссылок, что касается GC затем, что Вы больше не можете получать ссылку на него. Таким образом, у Вас не может быть объекта, который временно не имеет ссылки на него.

(Это не принимает ничего подлого как неуправляемый или небезопасный код, играющий в игры),

1
ответ дан 4 December 2019 в 13:50
поделиться

Нет, сборщик "мусора" не вызовет Вас проблемы.

Не предполагайте, что, потому что у Вас нет доступа к объекту, сборщик "мусора" собирается очистить его.

Сборщик "мусора" запускается со многих "корней" - объекты и ссылки, которые известны достижимые. Затем все объекты, достижимые от тех корней, найдены, и все остальное собрано.

Каждый рабочий поток - включая поток (потоки), которые обрабатывают Асинхронные вызовы, включен в список корней.

3
ответ дан 4 December 2019 в 13:50
поделиться

Объект остается ссылаемым очень хорошо реализацией асинхронных вызовов - который должен вести список всех открытых запросов, для сопоставления входящих данных к запросам. Скорее всего.NET использует глобальное (или класс) переменная для хранения запросов.

0
ответ дан 4 December 2019 в 13:50
поделиться

В первом примере кода, почему Вы создаете Запрос, если Вы не используете его?

Так или иначе, если никакая ссылка (прямой или косвенный) в настоящее время не существует к объекту ни от одного из объектов в объеме, GC может собрать его.

Таким образом в Вашем первом примере, когда программа выходит из Запроса Основного метода, находится все еще в объеме (в другом потоке), таким образом, это не будет собрано, пока асинхронный вызов не заканчивается. В Вашем втором примере оба, поток пула потоков и Ваш код сохраняют ссылку на Ваш объект, таким образом, это, очевидно, не будет собрано также.

0
ответ дан 4 December 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: