Condividi tramite


Conoscenze degli sviluppatori in materia di gestione della memoria

Aggiornamento: novembre 2007

La propria esperienza di gestione della memoria dipende dalla propria esperienza di sviluppo. In alcuni casi, occorrerà adattare le proprie tecniche di programmazione alle innovazioni introdotte con la gestione automatica della memoria di Common Language Runtime.

Sviluppatori COM

Gli sviluppatori COM sono abituati a una tecnica di gestione manuale della memoria che prevede il conteggio dei riferimenti. Ogni volta che si crea un riferimento a un oggetto, un contatore viene incrementato. Quando un riferimento a un oggetto esce dall'area di validità, il contatore viene decrementato. Quando il conteggio dei riferimenti a un oggetto raggiunge lo zero, l'oggetto viene terminato e la relativa memoria viene rilasciata.

Questo sistema di conteggio dei riferimenti è all'origine di numerosi problemi. Se le regole di conteggio dei riferimenti non vengono osservate con precisione, è possibile che gli oggetti vengano rilasciati prematuramente o che oggetti privi di riferimenti si accumulino in memoria. Anche i riferimenti circolari sono una fonte comune di errori. Un riferimento circolare si verifica quando un oggetto figlio ha un riferimento a un oggetto padre e l'oggetto padre ha un riferimento all'oggetto figlio. Questo scenario impedisce il rilascio o la distruzione di entrambi gli oggetti. La sola soluzione consiste nell'ottenere che gli oggetti padre e figlio aderiscano entrambi a un modello fisso di utilizzo e distruzione in cui, ad esempio, il padre elimina sempre prima il figlio.

Quando si sviluppano applicazioni in un linguaggio per Common Language Runtime, il Garbage Collector del runtime consente di eliminare l'esigenza di eseguire il conteggio dei riferimenti e di conseguenza gli errori che possono essere generati da questo schema di gestione manuale della memoria.

Sviluppatori C++

Gli sviluppatori C++ sono abituati alle pratiche della gestione manuale della memoria. In C++, quando si alloca memoria per un oggetto utilizzando l'operatore new, occorre poi rilasciarla utilizzando l'operatore delete. Gli errori che ne possono derivare vanno dal mancato rilascio di un oggetto, con il conseguente impegno ingiustificato di memoria, al tentativo di accedere alla memoria per un oggetto che è già stato rilasciato.

Quando si sviluppano applicazioni utilizzando Visual C++ o un altro linguaggio per Common Language Runtime, non è necessario utilizzare l'operatore delete per rilasciare un oggetto. Garbage Collector svolge questo compito automaticamente, quando l'oggetto non è più utilizzato dall'applicazione.

Gli sviluppatori C++ dovrebbero essere abituati a evitare l'uso di oggetti a breve termine per i costi di gestione manuale della memoria ad essi associati. Per gli oggetti a breve termine gestiti, che vengono creati e poi escono dall'area di validità tra una procedura di Garbage Collection e l'altra, il costo dell'allocazione e del rilascio della memoria è estremamente basso. Garbage Collector di .NET Framework è ottimizzato proprio per la gestione di oggetti con ciclo di vita breve. Quando si sviluppano applicazioni gestite, è appropriato utilizzare oggetti a breve termine nelle situazioni in cui ciò semplifica il codice.

Sviluppatori Visual Basic

Gli sviluppatori Visual Basic già conoscono la gestione automatica della memoria. Le consuete pratiche di programmazione sono applicabili alla maggior parte degli oggetti gestiti che si creano in .NET Framework. Occorre tuttavia considerare con attenzione le tecniche di progettazione consigliate per l'utilizzo di un metodo Dispose quando si creano o si utilizzano oggetti che incapsulano risorse non gestite.

.NET Framework supporta ulteriori linguaggi per Common Language Runtime rispetto a quelli illustrati nel presente argomento. Indipendentemente da quale linguaggio gestito si utilizzi, Garbage Collector di .NET Framework provvederà alla gestione automatica della memoria. Verrà allocata e rilasciata la memoria utilizzata dagli oggetti gestiti e, quando necessario, verranno eseguiti i metodi Finalize e i distruttori per la corretta pulitura delle risorse non gestite. La gestione automatica della memoria semplifica lo sviluppo prevenendo gli errori comuni che derivano dalle tecniche di gestione manuale della memoria.

Vedere anche

Concetti

Metodi Finalize e distruttori

Altre risorse

Garbage Collection