Как GC работает с Ienumerator и урожайностью?C#

Место общения программистов C#
Ответить
Anonymous
 Как GC работает с Ienumerator и урожайностью?

Сообщение Anonymous »

Я понимаю, что перечисления и ключевое слово доходности могут использоваться для помощи с Async/Shaggered Operations, так как вы можете вызвать movenext () для запуска следующего блока кода. Откуда уходит память в использовании сферы перечисления? Если вы не перемещаете () < /code> перечисление на все пути, если он в конечном итоге стараюсь? Не могу обернуть голову вокруг них все еще. Я не понимаю общего пользования/ссылки, которые случаются с перечислениями. Я также не понимаю, создаются ли перечисления как объекты, когда вы создаете его из функции, которая дает.// Example enumerator
IEnumerator ExampleFunction()
{
SomeClass heavyObject = new SomeClass();
while(heavyObject.Process())
{
yield return true;
}

if(!heavyObject.Success)
{
yield return false;
}

// In this example, we'll never get here - what happens to the incomplete Enumerator
// When does heavyObject get GC'd?
heavyObject.DoSomeMoreStuff();
}

// example call - Where does this enumerator come from?
// Is something creating it with the new keyword in the background?
IEnumerator enumerator = ExampleFunction();
while(enumerator.MoveNext())
{
if(!enumerator.Current)
{
break;
}
}

// if enumerator is never used after this, does it get destroyed when the scope ends, or is it GC'd at a later date?


Подробнее здесь: https://stackoverflow.com/questions/353 ... -and-yield
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»