Waarom dit topic...
Ook vanwege de oproep van tomatoman om meer Delphi topics, open ik nu dit topic
. Maar vooral om even iets te controleren...
Aangezien ik deze werkwijze zelf heb bedacht (wat natuurlijk niet wil zeggen dat ik de enige ben die dit zo doet...
) heb ik gezocht, maar niet heel veel gevonden.
Situatie
Om een applicatie te maken welke veel verschillende schermen gebruikt, heb ik alle benodigde schermen als frame gemaakt. Zodra een van deze frames getoond moet worden wordt het dynamisch geladen en krijgt 't als parent het mainform. Hierdoor is de inhoud van het frame zichtbaar op het mainform. Afhankelijk van de opbouw is dan zelfs niet zichtbaar dat het een ander scherm betreft.
Question?
Het hoofdscherm heeft een variabele tlf (een TFrame) waarin het op dat moment benodigde frame geladen wordt, door de volgende regel:
. Heeft iemand een idee waarom Delphi het geheugen van het frame niet netjes vrijgeeft, ondanks dat ik de .Free aanroep?
Edit:
Zit net te denken.... Is het nodig dat ik tlf eerst cast naar het huidige, geladen frame, of zou het free-en van tlf zelf voldoende moeten zijn?
Ook vanwege de oproep van tomatoman om meer Delphi topics, open ik nu dit topic
Aangezien ik deze werkwijze zelf heb bedacht (wat natuurlijk niet wil zeggen dat ik de enige ben die dit zo doet...
Situatie
Om een applicatie te maken welke veel verschillende schermen gebruikt, heb ik alle benodigde schermen als frame gemaakt. Zodra een van deze frames getoond moet worden wordt het dynamisch geladen en krijgt 't als parent het mainform. Hierdoor is de inhoud van het frame zichtbaar op het mainform. Afhankelijk van de opbouw is dan zelfs niet zichtbaar dat het een ander scherm betreft.
Question?
Het hoofdscherm heeft een variabele tlf (een TFrame) waarin het op dat moment benodigde frame geladen wordt, door de volgende regel:
Delphi:
Vervolgens wordt de parent-property van tlf op het hoofdcherm gezet. Na alle bewerkingen en acties die op het frame uitgevoerd zijn, wordt het frame vrijgegeven door de volgende regels1
| tlf := TBenodigdFrame.Create(nil); |
Delphi:
In principe zou ik denken dat dit goed gaat. Na de .free van de tlf bevat deze echter nog wel 'iets' volgens de watch die ik eraan gehangen heb. Als ik vervolgens verschillende keren tussen twee van deze frames wissel, loopt het geheugengebruik van de betreffende applicatie redelijk stevig omhoog. En dat wil volgens mij zeggen dat niet alles netjes wordt vrijgegeven 1
2
| tlf.Free; tlf := nil; |
Edit:
Zit net te denken.... Is het nodig dat ik tlf eerst cast naar het huidige, geladen frame, of zou het free-en van tlf zelf voldoende moeten zijn?
[ Voor 7% gewijzigd door OZ-Gump op 23-01-2004 10:11 ]