Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Garbage Collector...
sabato 13 dicembre 2008 - 00.11
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
tizio90
Profilo
| Newbie
25
messaggi | Data Invio:
sab 13 dic 2008 - 00:11
Ho letto che programmando in C# non appena nel proprio programma non vi sono più riferimenti a un dato oggetto, esso viene automaticamente deallocato (un po come il Java), senza bisogno di utilizzare costrutti quali il delete del C++. Ma fino a che punto ciò è vero per le classi del .NET? Faccio un esempio: all'interno di una funzione un oggetto Bitmap temporaneo (variabile locale) viene creato a partire da un file. Che succede quando la funzione termina? L'immagine viene realmente automaticamente deallocata dalla memoria o sono necessarie altre operazioni di pulitura per liberare le risorse? E per un'oggetto StreamWriter?
Anonimo
Profilo
| Senior Member
392
messaggi | Data Invio:
sab 13 dic 2008 - 11:53
>Ma fino a che punto ciò è vero per le classi del .NET? Faccio un esempio: all'interno di
>una funzione un oggetto Bitmap temporaneo (variabile locale)
>viene creato a partire da un file. Che succede quando la funzione
>termina? L'immagine viene realmente automaticamente deallocata
>dalla memoria o sono necessarie altre operazioni di pulitura
>per liberare le risorse? E per un'oggetto StreamWriter?
E' vero sempre! Solo che appunto non hai la padronanza complets come l'avevi in linguaggi dove non vi era il gc quali ad esempio c++, dove eri tu a decidere dove e quando una certa area di memoria veniva deallocata. Riguardo al tuo quesito, c'è da dire che il rilascio della memoria avviene in modo non deterministico, ovvero non è possibile sapere a priori l'istante in cui eseguito. Si presume però che alla sua prima passata successivamente al termine della funzione, il gc vedrà che c'è un area di memoria heap che è allocata ma non è referenziata da niente e nessuno, allora la deallocherà.
Puoi formare l'esecuzione del gccome spiegato in questo articolo, tieni conto che però l'esecuzione comporta un certo o/h.
http://www.developer.com/net/csharp/article.php/3343191
Inoltre, se sei così ossessionato, dai un occhio al costrutto using, serve appunto a definire l'ambito all'esterno del quale uno o più oggetti verranno eliminati.
http://msdn.microsoft.com/it-it/library/yh598w02
(VS.80).aspx
Ciao!
Riccardo
tizio90
Profilo
| Newbie
25
messaggi | Data Invio:
sab 13 dic 2008 - 20:29
Più che altro era per sapere se era necessario chiamare comandi di pulitura o tutto veniva fatto in automatico... Ma allora il comando Dispose a cosa serve? Ho letto (non ricordo dove) che serve a deallocare le risorse di un oggetto e andrebbe di norma chiamato quando necessario...
Anonimo
Profilo
| Senior Member
392
messaggi | Data Invio:
sab 13 dic 2008 - 20:45
Il dispose è il metodo nel quale vengo esplicitamente rilasciate delle risorse non gestite (come ad esempio handles di file o risorse, connessioni a database ecc ecc)
Riccardo
tizio90
Profilo
| Newbie
25
messaggi | Data Invio:
lun 15 dic 2008 - 17:02
Ho capito, quindi il metodo Dispose è quasi sempre facoltativo. Grazie per le risposte
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !