Avatar billede slowaterz Nybegynder
06. marts 2001 - 10:35 Der er 16 kommentarer og
1 løsning

Optimering af program størrelse og hukommelse forbrug.

Hej,
Jeg har et lille program, der trækker nogen data fra en database, regner lidt på tallene og sender resultaterne i en e-mail. Programmet fylder 617 KB. Det lyder af meget, da det er ganske små datamængder, der er involveret. Er det ikke muligt at \"slanke\" programmet et eller andet sted ?
Hvad værre er, når programmet startes, bliver der afsat over 15 MB hukommelse til det i alt ! (Det er på Windows NT 4 maskine.) Der må da findes et eller andet, jeg kan pille ved for at optimere RAM forbruget ! Eller hvad ?
Avatar billede borrisholt Novice
06. marts 2001 - 10:38 #1
Du kan allokere forms on the fly i stedet for når du starter op .. Det vil løse meget.

Jens B
Avatar billede snowball Novice
06. marts 2001 - 10:40 #2
Hvis du bruger mere end 1 form i dit projekt, så kan du med fordel la\' være med at oprette alle form\'ene når programmet starter. Altså først oprette den når den skal bruges og så free\'e den igen når du er færdig med at bruge den !

Snowball
Avatar billede snowball Novice
06. marts 2001 - 10:41 #3
hhmm...det kunne jeg næsten ha\' sagt mig selv ;)

Snowball
Avatar billede pellelil Nybegynder
06. marts 2001 - 10:41 #4
Det kan være svært at \"slanke\" dit program. Der findes værktøjer der er i stand til at komprimere din EXE fil, men dette er ofte på bekostning af ram forbrug mens programmet køre (da HELE programmet bliver pakket ud i hukommelsen). Når der er tale om ikke komprimerede EXE filer så indlæser windows ikke altid HELE programmet. For at skære mængden ned skal du nøjes med at use de units du har bruge for og i det omfang det er muligt skal du nøjes med at bruge std. komponenter (3. parts componenter \"fylder ofte mere\").

At du bruger 15 MB under runtime lyder umiddelbart af meget. Under W95/98 er der ikke så meget du kan stille op, men under NT findes der et kald der frigiver noget af den hukommelse som programmet benytter (det svarre lidt til at minimize/maximize din applikation). Men i skrivende stund kan jeg ikke lige huske hvad denne kommando heder.
Avatar billede slowaterz Nybegynder
06. marts 2001 - 10:49 #5
>>> borrisholt/snowball  jeg har een \"main\" form og jeg har flere kald til MessageDlg og InputBox funktionerne. Men de forme, som funktionerne bruger bliver vel oprettet or destrueret efterhånden som der er brug/ikke brug for dem ...
Avatar billede borrisholt Novice
06. marts 2001 - 10:53 #6
prøv lige at sende programmet til mig ... Jens @Borrisholt.com

Jens B
Avatar billede slowaterz Nybegynder
06. marts 2001 - 11:19 #7
>>> borrisholt : jeg tilføjer lige nogen kommentarer ... skal du bruge andet end .dpr, .pas og .dfm filerne ?
Avatar billede borrisholt Novice
06. marts 2001 - 11:21 #8
dit database sjov ... Bare zip det hele og send det ...

Jens B
Avatar billede martinlind Nybegynder
06. marts 2001 - 13:29 #9
Har du overvejet om det er nødvendigt at bruge form\'s, hvis du kan klare dig med et console program SÅ slanker det RIGTIG meget, evt. kig lidt på KOL/XCL det er værktøjer til at lave delphi programmer med forms der fydler ca. 50k og det er vel at mærke uden compress og andet sjov, det er OpenSource.

www.xcl.cjb.net

/Martin
Avatar billede slowaterz Nybegynder
06. marts 2001 - 13:35 #10
>>> martinlind : programmet skal køre under Windows. Der er bland andet to TDateTimePicker objekter, jeg bruger til at angive start og slut dato. Dem vil nødigt til selv at kode ...
Avatar billede martinlind Nybegynder
06. marts 2001 - 13:51 #11
Prøv XCL, jeg har lige installered det og lavet et \"hallo world\" project, der er en NewProject wizard med, compile. køre programmet og se det virke... Det gjore det og det fylder 37K med en tom form der shower når jeg runner.

/Martin
Avatar billede borrisholt Novice
07. marts 2001 - 08:18 #12
pellelil >> Jeg tror den funlktion du søger hedder : SetProcessWorkingSetSize()
Den ka bruges som følger :

procedure TMainForm.GoButtonClickNT(Sender: TObject);
var
  MainHandle : THandle;
begin
  MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
  SetProcessWorkingSetSize(MainHandle,DWORD(-1),DWORD(-1));
  CloseHandle(MainHandle);
end;


Jens B
Avatar billede pellelil Nybegynder
07. marts 2001 - 10:20 #13
Borrisholt> Jeg skal ikke kunne sige (på stående fod) om det er den, men det lyder meget sandsynlig.
Avatar billede slowaterz Nybegynder
07. marts 2001 - 11:59 #14
>>> martinlind : jeg har ikke haft held af at omkompilere mit program med KOL. Der er også et andet aspekt : andre folk skal muligvis videreudvikle/opdatere de programmer, jeg laver. De vil så skulle til at installere KOL. Jeg bliver desværre nødt til at afvise dit svar ... Men jeg kommer nok til at kigge på KOL til privat brug ...

>>> borrisholt : på andre maskiner end min optager programmet meget mindre hukommelse ... mærkligt ... men SetProcessWorkingSetSize kommer jeg nok til at bruge andetsteds. Tak for hjælpen.
Avatar billede martinlind Nybegynder
07. marts 2001 - 14:16 #15
Hvilken DB bruger du ?, BDE og IB componenter kan som regl også \"memory tunes\" ved at justere div. bufferstørelser ( mængden af data der fetchtes ).

/Martin
Avatar billede slowaterz Nybegynder
07. marts 2001 - 14:20 #16
Det er en Oracle 8 database. Jeg har overvejet at installere InterBase lokalt på min maskine til tests, men er kommet så langt ...
Avatar billede martinlind Nybegynder
07. marts 2001 - 14:24 #17
Det kan jo være Oracle Client\'en fylder ad h.. til
jeg kender den ikke i de nye udgaver, men IB den er bare fed, og IBExpress til Delphi kører også helt fedt. De tager ca. 2 min. at installere IB

/Martin
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester