Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB.NET] Remove e Dispose come usarli al meglio!

    Salve a tutti la domanda è semplice: in runtime creo degli oggeti tipo Panel, PictureBox e Button, e in particolare creo un panel all'interno del quel creo una PictureBox e due Button.

    Quando l'utente cambia visualizzazione voglio distruggere questi elementi che effettivamenete non servono più, e utilizzo i comandi "Remove" e "Dispose".

    Quello che mi chiedevo è se è necessario eliminare TUTTI gli oggetti, oppure basta eliminare il Panel e poi in automatico vengono eliminati e quindi tolti dalla memoria anche i sotto-oggetti in esso creati (ovvero la PictureBox e i Button).

    Credo che sia importante appurarlo perchè durante il programma è possibile che l'utente crei un bel po' di questi oggetti e liberarsene quando non sono più visualizzati può senz'altro contribuire a liberare memoria e quindi ad aumentare le prestazioni del programma stesso.

    Grazie a tutti.
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  2. #2
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Interesserebbe anche a me...

  3. #3
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    vengono eliminati in automatico.
    a un certo punto(indeterminabile) il garabage collector,quello(è un thread) che tiene d'occhio tutta la memoria, libera tutto...
    I got the remedy

  4. #4
    Questo è vero, ma è comunque una buona norma di programmazione richiamare Dispose su questi oggetti quando non vengono più utilizzati, in modo da liberare le risorse non gestite da essi impiegate (in questo caso, di fatto, handle di finestre) il più presto possibile.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,580
    mi è sorto un dubbio, lo posto qui visto che si parla di questo

    avendo una funzione in una classe "cls_prova" che restituisce un datatable
    codice:
    public function GetDT() as datatable
       dim dt as new datatable("Tabella")
       ..riempio il dt
       return dt
    end function
    e del codice nella windows form
    codice:
    dim dt as new datatable("Tabella")
    dim obj as new cls_prova
    dt=obj.GetDt
    ..eseguo le funzioni che mi servono e poi pulisco il dt
    dt.clear
    dt.dispose
    mi consigliate di fare un dispose anche nella classe?
    in effetti io nella funzione GETDT() creo un datatable, e lo restituisco, ma ovviamente quello nella funzione dovrebbe occupare memoria,
    il problema è che dopo il return il compilatore non eseguie il codice dopo,quindi quando e come lo pulisco?

    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  6. #6
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    la funzione ritorna un riferimento(puntatore) alla tabella e non la tabella.
    quel dt.clear non serve a niente visto che subito dopo chiami il dispose...
    quindi, se dopo che hai eseguito tutte le funzioni che ti servono e non ti serve più la tabella allora fai il dispose e basta...
    ovviamente se non fai il dispose, appena si esce da quel blocco e quindi la tabella non ha nessun referimento ci pensa il GC a chiamare la dispose...
    personalmente chiamo dispose molto raramente o meglio lo chiamo solo quando sò che quel determinato oggetto occupa tanta memoria per esempio si i form che hanno tanti controlli.
    I got the remedy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.