Oppure

Loading
01/06/09 11:04
Alfonso
Ciao a tutti

Per liberare la memoria, in Vb6 quando si chiude una form è mia pratica aggiungere in Form_Unload, Set Form = Nothing e per il form di avvio (per es MainForm):

For i = Forms.Count - 1 To 1 Step -1
Unload Forms(i)
Next
Set MainForm = Nothing
End

Nella conversione In Vb8 queste istruzioni sarebbero tradotte in
    
Private Sub MainMenu_FormClosing(ByVal .... ecc)

    ' ----- per chiudere in sequenza le form aperte e poter procedere al salvataggio di eventuali modifiche a database

While My.Application.OpenForms.Count > 1
i = My.Application.OpenForms.Count - 1
My.Application.OpenForms(i).Close()
End While

    ' -------- per forzare il garbage
    Form.Dispose()

    Application.Exit()

end sub

Ma sono necessarie?
Vb8 è così intelligente che gli basta Form.Close() per effettuare automaticamente Form.Dispose() ?
E (come mi sembra di capire) Application.Exit() procede alla chiusura sequenziale di tutte le form aperte prima di chiudere il programma?

Grazie in anticipo per i chiarimenti.
aaa
01/06/09 11:16
Postato originariamente da Alfonso:

Ciao a tutti

Per liberare la memoria, in Vb6 quando si chiude una form è mia pratica aggiungere in Form_Unload, Set Form = Nothing e per il form di avvio (per es MainForm):

For i = Forms.Count - 1 To 1 Step -1
Unload Forms(i)
Next
Set MainForm = Nothing
End

Nella conversione In Vb8 queste istruzioni sarebbero tradotte in
    
Private Sub MainMenu_FormClosing(ByVal .... ecc)

    ' ----- per chiudere in sequenza le form aperte e poter procedere al salvataggio di eventuali modifiche a database

While My.Application.OpenForms.Count > 1
i = My.Application.OpenForms.Count - 1
My.Application.OpenForms(i).Close()
End While

    ' -------- per forzare il garbage
    Form.Dispose()

    Application.Exit()

end sub

Ma sono necessarie?
Vb8 è così intelligente che gli basta Form.Close() per effettuare automaticamente Form.Dispose() ?
E (come mi sembra di capire) Application.Exit() procede alla chiusura sequenziale di tutte le form aperte prima di chiudere il programma?

Grazie in anticipo per i chiarimenti.


Scusa, ma cosa c'entra vb6 o vb8 nella sezione vb.net?? Per quei linguaggi c'è una sezione apposita!
01/06/09 11:55
Alfonso
Vb8 per me è Visual Basic Express 2008 che credo proprio faccia parte dell'ambiente .NET

Se no dove lo posto?
aaa
01/06/09 12:25
lorenzo
non ne sono sicuro al 100% ma ci pensa il garbage collector a gestire la memoria e a chiamare le giuste dispose.
tu limitati a chiudere il form e basta.

application.exit() invece dovrebbe chiudere tutti i form però solo quando sono stati elaborati tutti i messaggi nella coda di attesa...
aaa
01/06/09 13:41
GoLDBeRG
quando devi risparmiare memoria ram il vb.net ti mette di brutto i bastoni tra le ruote... l'ho scoperto a mie spese... ma l'ho fregato!!!

se hai un form basta fai il .close ci pensa lui a liberarle se invece come me hai una classe ad esempio
con 50 attribbuti o array quindi una classe molto pesante devi fare prima di dimentikarla il .Finalize che ordina al garbage collector di mettere in coda la liberazione ram di quella classe, non è detto che lo faccia subito, ma lo farà, cerca di usare il dispose e il finalize dove piu ti è possibile e quando non puoi azzera le variabili usando ad esempio dim casa as string= "" o dim pippo as object = nothing
aaa
01/06/09 13:45
Postato originariamente da Alfonso:

Vb8 per me è Visual Basic Express 2008 che credo proprio faccia parte dell'ambiente .NET

Se no dove lo posto?


Excuse moi...pensavo si trattasse di vb
01/06/09 17:31
theprogrammer
Postato originariamente da Alfonso:

Vb8 per me è Visual Basic Express 2008 che credo proprio faccia parte dell'ambiente .NET



E' sicuramente VB.NET, ma la versione VB8 equivale a VB.NET 2005 ... mentre la VB9 e' la VB.NET 2008 ...
aaa
01/06/09 18:49
Postato originariamente da theprogrammer:

Postato originariamente da Alfonso:

Vb8 per me è Visual Basic Express 2008 che credo proprio faccia parte dell'ambiente .NET



E' sicuramente VB.NET, ma la versione VB8 equivale a VB.NET 2005 ... mentre la VB9 e' la VB.NET 2008 ...


Capito...