Rilascio Risorse Chiusura Form

martedì 11 aprile 2006 - 18.20

pgobbo Profilo | Newbie

Un semplice bottone che richiama l'apertura di un form abbastanza complesso passandogli alcune proprietà. Ovviamente è richiesta l'apertura stile DialogBox quindi usiamo il metodo ShowDialog.

....
....

frm = New frmComuni
frm.Connessione = conn
frm.Connessione = connmsg

frm.showdialog

frm.dispose : frm = nothing

....
....
Controllando mediante GC la situazione della "spazzatura" mi ritrovo che le risorse interne al form non vengono deallocate e quindi i valori restituiti da GetTotalMemory aumentano sempre anche richiamando Gc.collect.

Il bello è che si se sostituisce a

frm.showdialog

le seguenti

frm.show
frm.close

la cosa funziona e il valore restituito da GetTotalMemory è sempre costante in seguito a GC.collect come dovrebbe essere.

Come è possibile rimediare?







Brainkiller Profilo | Guru

>la cosa funziona e il valore restituito da GetTotalMemory è
>sempre costante in seguito a GC.collect come dovrebbe essere.
>Come è possibile rimediare?

Attenzione, se tu fai una ShowDialog l'applicazione si ferma in attesa che l'utente chiuda prima o poi la Dialog Box. Del resto è una Dialog e non una Form.
Quindi se tu scrivi:

Dim a As New Form1 a.ShowDialog() a.Dispose() Console.WriteLine(GC.GetTotalMemory(True).ToString())

A Runtime il flusso del codice si ferma su a.ShowDialog() e procede solo dopo che hai chiuso la Dialog Box diversamente da quanto succede con la Form normale.

Quindi chiudi prima la Dialog e poi chiama il Collect.
CIao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5