Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Blocco Using
Forum - C# / VB.NET - Blocco Using

Avatar
Question (Normal User)
Rookie


Messaggi: 58
Iscritto: 14/12/2010

Segnala al moderatore
Postato alle 20:13
Sabato, 30/04/2011
Ragazzi vorrei sapere quando conviene usare il blocco using e quando no, potreste spiegarmelo?

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
1
Down
V
Segnala al moderatore
Postato alle 1:40
Domenica, 01/05/2011

il blocco using viene utilizzato per specificare al compilatore che "ci serve" un oggetto per tutta la durata del codice presente in quel blocco.

in particolare un oggetto creato con la clausola using deve implementare l'interfaccia IDisposable, ovvero quell'interfaccia che obbliga gli oggetti ad implementare un metodo Finalize responsabile del cleanup delle risorse.

http://msdn.microsoft.com/it-it/library/yh598w02.aspx

Ma allora quando una procedura finisce il proprio lavoro o si verifica un'eccezione che ne impedisce il termine gli oggetti non vengono automaticamente distrutti? - Question - 01/05/11 12:35
PM
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Up
0
Down
V
Segnala al moderatore
Postato alle 21:15
Lunedì, 02/05/2011
Testo quotato


Ma allora quando una procedura finisce il proprio lavoro o si verifica un'eccezione che ne impedisce il termine gli oggetti non vengono automaticamente distrutti?



Gli oggetti vengono automaticamente distrutti limitatamente alle risorse managed.
Un oggetto però può far riferimento a risorse non gestite, socket, file, oggetti COM etc.

Ora tu potresti fare la pulizia di queste risorse anche nel distruttore dell'oggetto, ma che verrà richiamato solo quando il garbage collector farà il suo giro; cosa non determinabile.

Quindi esponendo l'interfaccia IDisposable permetti al codice client di rilasciare le risorse non managed a comando richiamando il metodo Dispose.

Per arrivare al blocco using, è un zuccherino sintattico per evitare di dimenticarsi di richiamare il Dispose alla fine dell'esecuzione del codice sempre e comunque.

Quando il tuo codice usa modelli a oggetti che si basano pesantemente su risorse non gestite (e in particolare quando questi oggetti sono tanti) è importante non dimenticarsi di fare il Dispose per evitare dei memory leak, e quindi torna utile il blocco using.

Ok, adesso è chiaro. Vorrei però chiedere un ultima cosa, citando msdn: - Question - 02/05/11 23:24
"Use the Dispose method primarily on managed objects that use native resources and on COM objects that are exposed to the .NET Framework. Managed objects that use native resources (such as the FileStream class) implement the IDisposable interface." - Question - 02/05/11 23:25
Come faccio a capire quali usano le "risorse native"? - Question - 02/05/11 23:26
PM