GianmarcoInFossa ha scritto:
Se inizializzo creo un oggetto dentro un qualsia blocco di codice {blocco}
{ //inizio di uno stato di memoria
var x = new oggetto(): // qua' il compilatore alloca la memoria necessaria per x
...
...
} // fine dello stato di memoria
Intanto, dovrebbe essere
new Classe() e non
new oggetto(): l'oggetto - o istanza - è quella che ottieni usando
new a cui fa seguito il nome della classe.
Con quella istruzione, viene allocata la memoria necessaria per i dati dell'oggetto (nello spazio chiamato "heap"), mentre la variabile "x" è allocata sullo stack per le dimensioni minime necessarie a conservare il puntatore alla struttura che contiene i dati dell'oggetto, e che si trova appunto nell'heap.
GianmarcoInFossa ha scritto:
// Usciti dal blocco e quindi chiuso lo stato di memoria viene fatto il garbage collection , la memoria puntata da x viene liberata
// mi sono piegato bene ?
No. Usciti dal blocco di codice, la variabile "x" esce dallo scope e quindi non è più utilizzabile. Questo fa sì che l'oggetto a cui puntava la variabile "x" non abbia più riferimenti (a meno che questi non siano stati salvati da qualche parte, ad esempio in una lista o un array, restituendoli magari come valori di ritorno o dichiarandoli come campi, in breve prolungando loro la vita).
Quando un oggetto non ha più riferimenti attivi, l'oggetto stesso è candidabile per essere distrutto, ossia il GC provvede (quando lo ritiene opportuno) a rilasciare la memoria occupata dall'oggetto.
Il rilascio della memoria è un aspetto, ma ne esistono anche altri: ad esempio, una connessione a un DB deve implementare
IDisposable e all'interno del metodo
Dispose() chiudere fisicamente la connessione al database (es. socket); il metodo va invocato il prima possibile in modo da rilasciare la connessione fisica aperta sul DB anche prima che passi il GC a liberare la memoria dell'oggetto, chiamando
Dispose() (se non è stato già fatto).
Nella documentazione in linea comunque tutte queste particolarità sono spiegate in modo approfondito e con un discreto numero di esempi. Vi sono poi un sacco di articoli online che ne parlano e suggeriscono strategie da adottare in questi scenari.
Ciao!