Vraag & Antwoord

Programmeren

[Delphi] Kleine applicatie, groot geheugengebruik

9 antwoorden
  • Ik heb - in Delphi 5.0 - een heel klein programma geschreven, zonder visual componenets. De code staat geheel in de xxx.dpr. Ik gebruik geen units. De Debug-Opties staan uit, Optimalisatie staat aan. De grootte van het .exe-bestand is 68 kB. Als ik het proramma start, dan blijkt het 1,8 MB geheugen op te slokken. Ik heb geprobeerd de grootte van de Stack te verkleinen, maar dat heeft geen effect op de grootte van het gebruikte geheugen. Een zoektocht bracht me geen oplossing. Vraag: Hoe verklein ik het gebruikte geheugen?
  • Heb al heel erg lang niets meer met delphi gedaan, wellicht kan je dit eens proberen : http://www.delphipages.com/threads/thread.cfm?ID=95056&G=95029 Die 1.8 MB vind ik trouwens ook niet echt schokkend voor een delphi programma hoor.
  • De hoeveelheid gebruikte geheugen hangt natuurlijk ook af van wat je programma doet... Dat je programma dan maar 68 kb is maakt niet uit als je geheugenintensieve operaties uitvoert...
  • Bedankt voor het meedenken! Heb de link bekeken, maar daar kon ik niet zoveel mee. Het programmaatje (nu 43 kB) gebruikt de units SysUtils en Windows. In het programma gebeurt niet veel. Het haalt met ParamStr(0) het huidige pad op, haalt de huidige tijd op en gebruikt WinExec om een programma te starten, afhankelijk van die tijd. Ik verlang haast terug naar Turbo Pascal in het DOS-tijdperk! Het geheugengebruik is natuurlijk relatief klein, vergeleken met de 1 of 2 GB, die tegenwoordig gebruikelijk is, maar toch...
  • [quote:3e0c2694e6="Chris Kruidenier"]Bedankt voor het meedenken! Heb de link bekeken, maar daar kon ik niet zoveel mee. Het programmaatje (nu 43 kB) gebruikt de units SysUtils en Windows. In het programma gebeurt niet veel. Het haalt met ParamStr(0) het huidige pad op, haalt de huidige tijd op en gebruikt WinExec om een programma te starten, afhankelijk van die tijd. Ik verlang haast terug naar Turbo Pascal in het DOS-tijdperk![/quote:3e0c2694e6] Als je de SysUtils unit eruitflikkert, dan moet je een .exe kunnen maken rond de 20 kB (kan ook 10 kB meer zijn ofzo). Overigens zitten in de SysUtils unit soms wel handige functies. De noodzakelijke functies die je wilt gebruiken kun je eventueel kopieren of zelf herschrijven, zodat je die unit niet meer nodig hebt.
  • Dat is een goede suggestie! Dat ga ik proberen, bedankt!
  • Zolang er genoeg geheugen is zal Windows zoveel geheugen alloceren als nodig is voor jouw applicatie - soms zelfs teveel. Opzich is dit geen probleem, tenzij je hoeveelheid vrije geheugen klein wordt. Windows lost dit zelf op door de pagefile te gebruiken of verlaten geheugen vrijgeven. Trouwens, waar haal je die 1,8 MB vandaan? Gewoon taakbeheer laat alleen de hoeveelheid geheugen weer die Windows op dat moment aan je gegeven heeft, en niet wat de applicatie werkelijk gebruikt. Wat betreft de grootte van de executable: heb je een speciale reden om je applicatie zó klein te maken? Met de snelheid van internet is het verschil tussen 20 kB en 100 kB te vrijwel verwaarlozen. Met Delphi zit je met een serieuze applicatie al gauw op 2 MB trouwens, afhankelijk van de packages die je gebruikt uiteraard.
  • Bedankt voor de reactie Johan. Je hebt natuurlijk 100% gelijk! Ik stam nog uit het pre-DOS-tijdperk, 6800 en 6809, weet je wel. Daar was het essentieel om een applicatie zo klein mogelijk te maken wat betreft grootte van de executable. Dat gedrag is zo ingesleten, dat ik dat nog steeds probeer, al maakt het nu niet zoveel meer uit. Maar er worden veel computers verkocht, met Vista en maar 1GB geheugen. Mensen, die mijn programma gebruiken wil ik niet het gevoel geven, dat mijn programma er de oorzaak van is dat Vista niet lekker vlot loopt. Dus elke 100kB is er één dacht ik. Inderdaad heb ik de grootte uit Taakbeheer. Als 1,8 MB is toegewezen aan mijn programma, kan Windows dan daar een gedeelte van afsnoepen als het nodig is? Overigens h4xX0r aan het SysUtils uitkleden ben ik nog niet aan toe gekomen, druk, druk, druk!
  • [quote:a452fa0a93="Chris Kruidenier"]Daar was het essentieel om een applicatie zo klein mogelijk te maken wat betreft grootte van de executable. Dat gedrag is zo ingesleten, dat ik dat nog steeds probeer, al maakt het nu niet zoveel meer uit.[/quote:a452fa0a93] Ja, kwestie van wennen denk ik. Ik heb vanaf versie 4 in Delphi geprogrammeerd en ben een jaar geleden definitief overgestapt naar .NET. Zoals je misschien weet hoef je onder .NET geen objecten vrij te geven aangezien de garbage collector dit voor je doet. Zo nu en dan. Met als directe gevolg dat je per definitie meer geheugen gebruikt dan je nodig hebt. Wat voor jou de overstap is van het pre-DOS tijdperk naar Win32, is voor mij van Win32 naar .NET zegmaar. [quote:a452fa0a93="Chris Kruidenier"]Maar er worden veel computers verkocht, met Vista en maar 1GB geheugen. Mensen, die mijn programma gebruiken wil ik niet het gevoel geven, dat mijn programma er de oorzaak van is dat Vista niet lekker vlot loopt. Dus elke 100kB is er één dacht ik.[/quote:a452fa0a93] Over 100 kB hoef je je geen zorgen te maken, zelfs niet over een paar megabyte; programma's gaan tegenwoordig al snel naar 10 MB. [quote:a452fa0a93="Chris Kruidenier"]Als 1,8 MB is toegewezen aan mijn programma, kan Windows dan daar een gedeelte van afsnoepen als het nodig is?[/quote:a452fa0a93] Ja. Je krijgt meer geheugen toegewezen om, indien nodig, meteen geheugen te kunnen krijgen als je programma dat nodig heeft. Wordt het vrije geheugen krap, dan gaat Windows hierop inkorten en pagen. Weet niet of je bekend bent met Vista, maar Vista heeft iets wat SuperFetch heet. SuperFetch is het laden van veel gebruikte programma's in het vrije werkgeheugen. Wanneer je een gecached programma dan start, laadt deze uit het werkgeheugen en niet van de harde schijf. Als een programma geheugen nodig heeft dan geeft SuperFetch meteen geheugen vrij. Zo heb ik op het moment van schrijven 0 MB geheugen vrij. De gedachte achter SuperFetch is dat het laden uit het werkgeheugen vele malen sneller is dan laden van de harde schijf, en waarom zou je werkgeheugen niet zoveel mogelijk benutten?

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.