Nella sessione di oggi, Richter ha fatto notare un dettaglio del quale non ero a conoscenza...

public void Main()
{
   Person pers;
   per=new Person();
   System.Console.WriteLine("Person Name is {0} ",per.Name());
   // 1.
   DoATimeConsumingOperation();
   // 2.
}

Secondo voi, quando il garbage collector considera Person non più referenziata?, al punto 1 oppure 2?
Io avrei detto 2, però la risposta è 1, in quanto il JIT è talmente smart da capire che le istruzioni successive non interessano Pers e percio al punto 1 Pers potrebbe venire, se necessario, scaricata dal GC.
Attenzione che questo è valido solo in Release mode perchè in debug mode, il punto corretto è il 2 (per facilitare il debugging...)