Stavo solo scrivendo una funzione (in C # in questo caso) che memorizzava enormi quantità di dati in una variabile locale nelle prime fasi del codice, diciamo al 5% del codice delle funzioni.
Dopo quel punto, i dati in questo memeory non sono più usati,
anche il seguente 95% di codice ha un runtime variabile, in quanto parte di esso dipende da risorse esterne.
La mia idea era (ispirata a C) di "liberare attivamente" quel blocco di memoria.
In un ambiente con un GC questo è per lo più semplicemente impossibile.
La mia idea:
memeoryMonster = null;
Perché questo?
Il GC non raccoglierebbe mai quell'oggetto mentre l'esecuzione è ancora all'interno della funzione, poiché la variabile è ancora in ambito e quindi connessa al grafico dell'oggetto.
Questa riga rimuoverà il riferimento all'oggetto e quindi lo scollegherà dal grafico dell'oggetto.
Non sto chiamando attivamente il GC, ma sappiamo che viene eseguito se la memoria si esaurisce, che potrebbe accadere nella seconda parte della funzione o in qualsiasi momento
o tutti gli altri thread sono inattivi, cosa che potrebbe accadere molto bene quando il codice attende le risorse esterne i.e ..
In questo modo voglio che il GC sia in grado di raccogliere quella memoria, se necessario.
Inoltre mi rendo conto che è probabilmente meglio dividere quella funzione in più parti, che ho già fatto, o almeno impacchettare la parte di memoria in una coppia di {}
per far sì che ottenga il proprio ambito, quindi la domanda è di natura teoretica.
La mia domanda:
Funziona come penso che faccia?
L'impostazione delle variabili locali su NULL consente al GC di raccogliere la memoria che occupavano?