Libro "VB 2010 spiegato a mia nonna" (33)

Gestione della memoria

In questo capitolo abbiamo già accennato ad alcuni aspetti della gestione della memoria, cioè l’uso dei tipi per valore (memorizzati nello stack) e dei tipi per riferimento (memorizzati nel managed heap, una specifica area della memoria). In questo paragrafo vedremo altri aspetti importanti per la conoscenza dei meccanismi di gestione della memoria.

In passato, la scarsità di memoria disponibile sui personal computer imponeva ai programmatori di ottimizzare al massimo le risorse, fino all’ultimo byte. Spesso, infatti, era necessario spingere al massimo lo sfruttamento della memoria a scapito delle prestazioni del programma. le prestazioni di un programma e la memoria utilizzata dal programma stesso sono due parametri che sovente sono in competizione tra loro: ottimizzando al massimo l’occupazione di memoria si potrà consumare di meno questa risorsa, ma il programma sarà probabilmente più lento; allo stesso modo, si potrà ottenere un miglioramento delle prestazioni del programma, unicamente consumando più memoria. Attualmente, con una maggiore quantità di memoria disponibile, si deve trovare il giusto equilibrio, prestare attenzione sia alle prestazioni che al moderato utilizzo di memoria. Inoltre, il Framework .NET viene utilizzato anche su dispositivi mobili: questi ultimi sono generalmente dotati di una quantità di memoria limitata e richiedono, quindi, ancora una maggiore attenzione da parte dello sviluppatore nell’evitare inutili sprechi di memoria.

Qualsiasi programma sviluppato sulla piattaforma .NET, durante la sua esecuzione, crea continuamente oggetti. ogni oggetto utilizza una quantità variabile di spazi di memoria, in modo dipendente dal numero di variabili private e pubbliche definite al suo interno (cioè il suo “stato”) e dal contenuto di tali variabili. Più variabili ci sono in un oggetto e più contenuti sono memorizzati nelle variabili, più memoria viene utilizzata. non possiamo creare oggetti all’infinito, altrimenti in breve tempo potremmo saturare la memoria e causare qualche problema di funzionamento anche al sistema.

In .NET vige quindi una regola fondamentale: non bisogna conservare in memoria tutti gli oggetti creati, ma bisogna distruggere gli oggetti che non servono più. Allo stesso modo, le risorse del computer che non servono più devono essere rilasciate: si pensi, per esempio, a un file su disco aperto in scrittura. Finché non terminiamo la scrittura e chiudiamo il file, nessun altro utente potrà accedere a quel file.

Immaginiamo, come esempio, la sequenza di operazioni che dobbiamo eseguire per creare e scrivere in un file:

  1. creare una variabile con un riferimento a un oggetto che rappresenta il file su disco, indicando di creare tale file;
  2. eseguire alcune operazioni su tale file, per esempio, scrittura di testo al suo interno;
  3. chiudere il file, chiamando un opportuno metodo dell’oggetto che lo rappresenta;
  4. annullare la variabile contenente il riferimento all’oggetto.

ecco il codice di massima (non ha importanza se non lo comprendete fino in fondo, nel corso del libro troverete tutte le spiegazioni necessarie):

‘ Esempio: 02.03

Imports System.IO

Module Module1

   Sub Main()

      ‘ creo e apro il file

      Dim fs As New StreamWriter(

         “C:\Users\Mario\Desktop\Es02_04.txt”, True)

      ‘ scrivo nel file fs.WriteLine(“Prova”)

      ‘ chiudo il file fs.Close()

      ‘ rilascio il riferimento all’oggetto

      fs = Nothing

   End Sub

End Module

non appena il programma ha eseguito l’ultima istruzione (fs = Nothing) e prima di terminare il metodo Main, ci troviamo nella situazione seguente:

✥ la variabile fs non contiene più il riferimento all’oggetto di tipo StreamWriter;

✥ l’oggetto di tipo StreamWriter, però, esiste ancora in memoria.

Cosa dobbiamo fare, quindi, per eliminare definitivamente tale oggetto e finalmente liberare lo spazio di memoria occupato? Semplicemente niente: è tutto automatico, anche se non immediato.

Per capire meglio come funziona la distruzione degli oggetti nella piattaforma .neT, dobbiamo esaminare un importante elemento del Framework .NET: il Garbage Collector (letteralmente: “raccoglitore di rifiuti”).

(…segue…)

Fonte: Cap. 2 – libro “Visual Basic 2010 spiegato a mia nonna”, Edizioni FAG Milano, Autore Mario De Ghetto, 2011, http://bit.ly/NRO6Cn.

About these ads

Pubblicato il 15 agosto 2012, in Programmazione, VB2010SAMN, VS 2010 con tag , , , , . Aggiungi il permalink ai segnalibri. Lascia un commento.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 846 follower

%d blogger cliccano Mi Piace per questo: