geheugengebruik

Status
Niet open voor verdere reacties.

famlam

Gebruiker
Lid geworden
15 okt 2008
Berichten
416
Ik heb een programmaatje met verscheidene verschillende forms. Als ik in taakbeheer de hoeveelheid geheugen bekijk die het bij het opstarten gebruikt dan is dat nog vrij normaal (ongeveer 7 MB). Als ik in het programmaatje één of meerdere andere forms open dan loopt dit snel op naar bijvoorbeeld 8,5 MB geheugengebruik. Echter: als ik dat nieuwe form weer sluit krijg ik dit geheugen niet terug! Het komt pas weer vrij als het volledige programma gesloten is.

Hoe kan ik ervoor zorgen dat ik het geheugen WEL beschikbaar krijg als ik een ander form dan het 'hoofdform' sluit?
 
Ik verkeer even in verwarring.
In mijn thuishaven Delphi kun je objecten destroyen als je
ze niet meer nodig hebt en daarmee geef je geheugen vrij.
(Niet zozeer forms, alswel andere objecten die je in dat form hebt aangemaakt.)

Bij nader inzien zie ik dat mijn visual basic boek hier met geen woord over rept.
 
het heet (iig in vb6....) het unloaden van objecten (activeX gevalletjes, bijna alles dus). Je gebruikte daar de unload-code voor:
Code:
unload Form1[COLOR="SeaGreen"]''destroy' of 'kill' je "object" weer[/COLOR]
het tegenovergestelde van unload is het 'load'-en van objecten; dit gebruik je bv. in control-arrays.


:thumb:
 
het heet (iig in vb6....) het unloaden van objecten (activeX gevalletjes, bijna alles dus). Je gebruikte daar de unload-code voor:
Code:
unload Form1[COLOR="SeaGreen"]''destroy' of 'kill' je "object" weer[/COLOR]
het tegenovergestelde van unload is het 'load'-en van objecten; dit gebruik je bv. in control-arrays.


:thumb:

Helaas bestaat unload niet in vb.net (niet in de vorm unload FormX, niet als unload(FormX) en niet als FormX.unload()). (o ja: load bestaat ook niet voor forms, om ze te tonen zet je in vb.net FormX.Show())
 
Je zou kunnen kijken of het aanroepen van de garbagecollecter iets uitmaakt: Form.Dispose().

Hou rekening met het feit de het .NET framework zelf bepaalt wanneer het een object disposed, dit kun je door deze aanroep forceren. Kijk ook goed na welke forms unmanaged code gebruikt (images waar je naar linkt, openen van word, excel en COM applications).

Deze worden niet door het .NET framework afgesloten, dit dien je zelf met de hand te doen.

Ik hoop dat je hier iets mee opschiet?

(natuurlijk de form eerst sluiten Form.Close() als je dispose aanroept)
 
Laatst bewerkt:
Je zou kunnen kijken of het aanroepen van de garbagecollecter iets uitmaakt: Form.Dispose().

Hou rekening met het feit de het .NET framework zelf bepaalt wanneer het een object disposed, dit kun je door deze aanroep forceren. Kijk ook goed na welke forms unmanaged code gebruikt (images waar je naar linkt, openen van word, excel en COM applications).

Deze worden niet door het .NET framework afgesloten, dit dien je zelf met de hand te doen.

Ik hoop dat je hier iets mee opschiet?

(natuurlijk de form eerst sluiten Form.Close() als je dispose aanroept)

Helaas, de hoeveelheid geheugengebruik na formX.dispose() blijft gelijk aan die ervoor...
 
.NET regelt het Garbag collecting zelf. Hier moet je eigenlijk zelf niet meer mee gaan stoeien, en waarom zou je? Het is immers een proven concept.

Waarschijnlijk heb je nog genoeg geheugen vrij, hierdoor zal het .NET framework nog niet alles gaan opruimen. Dit kost tijd en gaat ten koste van je snelheid van je programma. Wanneer het programma afgesloten word, of de garbagecollector vind het nodig tijd om op te ruimen dan zal dit gebeuren.

Je kan het opruimen forceren met GC.Collect() als je de objecten hebt 'gedisposed', maar ik raad het je ten zeerste af.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan