• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

garbage collection (voor de puristen)

Status
Niet open voor verdere reacties.

sylvester-ponte

Verenigingslid
Lid geworden
19 apr 2007
Berichten
6.546
weet iemand of garbage collection in excel ook goed gaat als ik een pointer naar een object van dat object af haal?

bv set D=createobjec("scripting.dictionary")
set D("test")= ( een ander object )

als ik nu D weer wil gebruiken voor iets anders bvb D=5
wordt die dictionary dan automatisch uit het geheugen gewist? (mist er geen andere pointers op staat natuurlijk)

of moet ik dan eerst vbv set D = Nothing uitvoeren?
of????? iets anders om het geheugen vrij te geven?

dus de vraag is: als alle pointers naar een object worden verwijderd wordt dan het object automatisch verwijdert?
of blijft hij ergens in het geheugen onbenaderbaar in de weg zitten?
hoe moet ik bvb een dictionary netjes verwijderen?
 
Laatst bewerkt:
Jan, het gaat mij er om wat gebeurt er met het bruikbare geheugen als ik bvb
meer dan duizend keer een dictionary onbeheerd (dus zonder pointer ) in het geheugen achter laat.
dus worden objecten waar alle pointers van af gehaald worden automatisch opgeruimt?
 
Dit is het antwoord van ChatGPT:

Als je de variabele die de referentie naar de dictionary bevat, overschrijft met een andere waarde, maar er zijn nog andere variabelen of objecten die ook verwijzen naar dezelfde dictionary, dan blijft de dictionary in het geheugen totdat alle referenties naar het object niet meer in gebruik zijn
 
Nogmaals, ik ken de precieze implementatie van het scripting dictionary object niet. In VBA zou het wel goed moeten gaan. Maar er gebeurt natuurlijk van alles in de scripting dll waar jij geen invloed op hebt. Misschien beter om "duidelijk" te zijn en expliciet de dictionary items te laten weggooien?
 
JEC, ik hoop dat ChatGPT gelijk heeft, en dat ik dus niet zelf de rommel hoef op te ruimen.

en kan ik dus eenvoudig dit loopje bvb:

for n= 1 to veel
set D = createobject("scripting.dictionary")
.......
next

uitvoeren zonder dat ik problemen krijg met het geheugen.
 
Laatst bewerkt:
Je zou dus kunnen stellen dat de "oude" dictionary in geheugen blijft totdat "ar" wordt overschreven

Code:
for n= 1 to veel
  set D = createobject("scripting.dictionary")
  D("test") = array("a","b","c")
  ar = D("test")
next
 
Er is geen enkele noodzaak een objectvariabele met een dictionary te vervangen door een nieuwe dictionary.

Alle items in een dictionary kunnen nl. in 1 keer verwijderd worden met 'removeall'.
Vervolgens kan de dictionary opnieuw gevuld worden.

Zie

https://www.snb-vba.eu/VBA_Dictionary.html#L_21
 
In het 'locals' window in de VBEditor kun je precies zien wat er met variabelen gebeurt bij iedere VBA-stap.

Code:
Sub M_snb()
  Set dic = CreateObject("scripting.dictionary")
  
  MsgBox TypeName(dic)
  
  Set dic = Sheet1

  MsgBox TypeName(dic)
End Sub

Wees slim en vermijd Object-variabelen en gebruik de With ... End With methode om rechtstreeks met objecten te werken.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan