Yield Return–Memory Leak

Check out the following Code:

   1: class Program

   2: {

   3:     static void Main()

   4:     {

   5:         var numbers = Calculate(1, 10);

   6:  

   7:         foreach (var i in numbers)

   8:         {

   9:             Console.WriteLine("iterated: " + i);

  10:             if (i == 5)

  11:                 break;

  12:         }

  13:  

  14:         Console.ReadLine();

  15:     }

  16:  

  17:     static IEnumerable<int> Calculate(int min, int max)

  18:     {

  19:         for (var i = min; i < max; i++)

  20:         {

  21:             Console.WriteLine("calculated: " + i);

  22:             yield return i;

  23:         }

  24:     } 

  25: }

And the result:

image

 

As we see, .NET remembers the position in the foreach loop within the ‘Calculate’-method. Does anyone know when this pointer will be cleaned by the garbage collector? Most likely when the variable ‘numbers’ gets collected, right?

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: