Utilizzo memoria variabili
Hai un problema con Excel? 
Utilizzo memoria variabili
di Lucas87 data: 06/03/2014 18:57:08
Ciao a tutti.
La domanda contorta è: che fine fanno le variabili quando il progetto viene chiuso?
Tralasciando come vengono memorizzate e richiamate da diverse subroutine, se non sbaglio, quando il nostro foglio di calcolo viene chiuso le variabili vengono "perse/distrutte". Sbaglio?
Chiedo questo perchè in diversi progetti vedo scritto set variabile=nothing prima di end sub ...perchè?
Se la macro dovesse essere avviata più volte comunque la variabile verrebbe inizializzata nuovamente; mentre se al termine dell'utilizzo il foglio venisse chiuso, la variabile dovrebbe "svanire" (vuota o piena che sia).
Un dubbio analogo mi è venuto dopo aver risposto oggi a un quesito su una macro a tempo
(post "macro a tempo" di michele 1985) dove il codice prosegue mentre una variabile resta =true. In questo caso è meglio portare =false la variabile prima della chiusura e quindi fermare il codice, oppure basta chiudere il file e chi se ne frega della variabile tanto il codice si ferma comunque?
Forse quanto presupposto non è vero e quindi la memoria si riempie di variabili inutilizzate?
di Vecchio Frac data: 06/03/2014 19:09:13
In linea di massima dovrebbe intervenire qualcosa che si chiama "garbage collector", un meccanismo che provvede a rilasciare le locazioni di memoria utilizzate dal programma al termine dell'esecuzione (generalmente quando si chiude il processo padre, cioè l'ultima istanza di Excel, Word, Access, ecc.). Il meccanismo è automatico ma certe volte non funziona bene (soprattutto quando rimangono appese in memoria le istanze dei programmi principali per i motivi più diversi).
E' di solito buona norma annientare gli oggetti che vengono istanziati con CreateObject.
Gli altri sono normalmente distrutti da Excel o Word alla loro chiusura altrimenti avresti il paradosso di dover specificare ad esempio Set Range("A1") = Nothing (cosa che per fortuna non è permessa), essendo ogni cella un oggetto.
Comunque questo vale per le variabili oggetto, non per i valori (booleani o di altro tipo) che vengono comunque azzerati alla fine della vita della variabile.
di patel data: 06/03/2014 19:27:44
basta fare qualche prova (inserendo uno stop al termine del codice) con il gestore attività in funzione e si vede che al termine dell'esecuzione la memoria viene rilasciata.
di scossa data: 07/03/2014 09:08:30
cit. Vecchio Frac: "E' di solito buona norma annientare gli oggetti che vengono istanziati con CreateObject.
Gli altri sono normalmente distrutti da Excel o Word alla loro chiusura ....."
Questo nella teoria, nella pratica e nella realtà sappiamo bene che la grabage-collection di Excel non è del tutto affidabile, quindi meglio un bel Set a Nothing di tutte le istanze create.
cit. Vecchio Frac: ".....altrimenti avresti il paradosso di dover specificare ad esempio Set Range("A1") = Nothing (cosa che per fortuna non è permessa), essendo ogni cella un oggetto"
Un momento, senza entrare troppo nel tecnico è evidente, ma se non lo fosse lo preciso, che quando parliamo di disturggere (set a Nothing) gli "oggetti", si parla di distruggere le loro istanze, non l'oggetto cui si riferiscono, ed essendo Range("A1") un oggetto e non una istanza non puoi certo distruggerlo (come giustamente dici anche tu). Altrimenti un bel Set ThisWorkbook = Nothing e facciamo implodere Excel
Mentre se creiamo una sua istanza con
Set wb = ThisWorkbook
alla fine del codice molto meglio prevedere un bel
Set wb = Nothing
di Vecchio Frac data: 07/03/2014 14:09:26
+1
Vuoi Approfondire?