Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Speicherverbrauch von kleinen Anwendnungen (https://www.delphipraxis.net/40201-speicherverbrauch-von-kleinen-anwendnungen.html)

OrallY 12. Feb 2005 11:44


Speicherverbrauch von kleinen Anwendnungen
 
Hi,

ich bin gerade dabei, mein Programm und dessen Speichermanagment so weit zu optimieren, wie möglich. Also hat mich interessiert, wieviel ein Programm an Speicher verbraucht, was so wenig wie möglich macht. Ein Kompilat mit folgendem Code verbraucht bei mir im Taskmgr 804 (Byte? Kilobyte?):
Code:
program Project1;

uses
  Windows;

begin
   Sleep(10000);
end.
Allerdings kenne ich Programme, die weitaus weniger verbrauchen. Beispielsweise Passwordsafe (http://passwordsafe.sourceforge.net/) verbraucht, wenn es minimiert ist, gerademal 524. Ich kenne weitere Programme, die noch weniger benötigen.

Wie ist das möglich?

greez

leddl 12. Feb 2005 12:33

Re: Speicherverbrauch von kleinen Anwendnungen
 
Das liegt daran, daß du mit der VCL programmierst und einen Haufen Units einbindest, die du evtl gar nicht brauchst. Wenn du möglichst kleine Programme willst, dann programmier non-VCL.

OrallY 12. Feb 2005 12:36

Re: Speicherverbrauch von kleinen Anwendnungen
 
thx for answer

aber du wirst mir doch zustimmen, dass es sich bei diesem Programm

Code:
program Project1;

uses
  Windows;

begin
   Sleep(10000);
end.
wohl nicht um ein VCL-Programm handelt :wink:.

greez

Oxmyx 12. Feb 2005 12:43

Re: Speicherverbrauch von kleinen Anwendnungen
 
Lass doch mal die Windows-Unit weg. Lass doch am besten alle zusätzlichen Units weg. ;-)
Sleep kannst du auch direkt implementieren:
Delphi-Quellcode:
procedure Sleep; external kernel32 name 'Sleep'; stdcall;

leddl 12. Feb 2005 12:45

Re: Speicherverbrauch von kleinen Anwendnungen
 
OK, ich gebs zu... Habs nur überflogen und den Code nich wirklich aufmerksam gelesen... :wall:
Aber der Effekt is der gleiche. Die Unit Windows is eben wahrscheinlich recht umfangreich.
Aber kurze Frage: Läuft das so? Is Sleep nich in den SysUtils?

Luckie 12. Feb 2005 12:49

Re: Speicherverbrauch von kleinen Anwendnungen
 
Nein das ist die API-Funktion.

Windows.pas selber wird schon vielea initialisieren, denke ich.

OrallY 12. Feb 2005 12:58

Re: Speicherverbrauch von kleinen Anwendnungen
 
Da ich die Windowsunit nicht einbinde, existiert die Konstante kernel32 ja auch nicht mehr ;).

Gleicher Speicherverbrauch bei folgender dpr (804K):
Code:
program Project1;
procedure Sleep; external 'kernel32.dll' name 'Sleep';
  Sleep;
end.

Luckie 12. Feb 2005 13:00

Re: Speicherverbrauch von kleinen Anwendnungen
 
Delphi bindet aber immer automatisch die Unit System.pas ein, die wird es dann sein.

OrallY 12. Feb 2005 13:01

Re: Speicherverbrauch von kleinen Anwendnungen
 
Kann man das Einbinden der system.pas irgendwie unterbinden?

Chewie 12. Feb 2005 13:17

Re: Speicherverbrauch von kleinen Anwendnungen
 
Neim, aber man kann die system.pas und die sysinit.pas ersetzen ;)

OrallY 12. Feb 2005 20:19

Re: Speicherverbrauch von kleinen Anwendnungen
 
Zitat:

Zitat von Chewie
Neim, aber man kann die system.pas und die sysinit.pas ersetzen ;)

Das würde auch bedeuten, nen eigenen Speichermanager zu schreiben? Ok, das ist mir momentan ein wenig zu aufwendig :wink:.

tommie-lie 12. Feb 2005 20:41

Re: Speicherverbrauch von kleinen Anwendnungen
 
Zitat:

Zitat von OrallY
Das würde auch bedeuten, nen eigenen Speichermanager zu schreiben?

Nicht, wenn man den von Windows nimmt.

OrallY 12. Feb 2005 21:58

Re: Speicherverbrauch von kleinen Anwendnungen
 
Ich hab mal die SysInit.pas und die System.pas mit komplett leeren Units ersetzt. Immer noch gleicher Speicherverbrauch.

Zitat:

Zitat von tommie-lie
Nicht, wenn man den von Windows nimmt.

Erklär dich bitte :).

Sprint 12. Feb 2005 22:37

Re: Speicherverbrauch von kleinen Anwendnungen
 
Zitat:

Zitat von OrallY
Ich hab mal die SysInit.pas und die System.pas mit komplett leeren Units ersetzt. Immer noch gleicher Speicherverbrauch.

Das ist nicht möglich. Wenn du keine Fehlermeldung bekommen hast, dann hat Delphi die fertigen DCU's eingebunden. Es gibt bestimmte Dinge, die müssen in der System.pas stehen. Ohne geht nicht. Kannst dieses modifizieren und in einem anderen Verzeichnis speichern. In deinen Projektoptionen setzt du dann das Verzeichnis wo sich die neuen Dateien befinden.

Robert_G 12. Feb 2005 22:44

Re: Speicherverbrauch von kleinen Anwendnungen
 
Vielleicht solltest du mal eine Blick auf Nicos Delphi Beispiele werfen.
Das Minimal Delphi Exe Beispiel bringt eigene System.pas & SysInit.pas mit. ;)

OrallY 12. Feb 2005 22:50

Re: Speicherverbrauch von kleinen Anwendnungen
 
Zitat:

Zitat von Sprint
Zitat:

Zitat von OrallY
Ich hab mal die SysInit.pas und die System.pas mit komplett leeren Units ersetzt. Immer noch gleicher Speicherverbrauch.

Das ist nicht möglich. Wenn du keine Fehlermeldung bekommen hast, dann hat Delphi die fertigen DCU's eingebunden. Es gibt bestimmte Dinge, die müssen in der System.pas stehen. Ohne geht nicht. Kannst dieses modifizieren und in einem anderen Verzeichnis speichern. In deinen Projektoptionen setzt du dann das Verzeichnis wo sich die neuen Dateien befinden.

Hat mich auch gewundert, dass es keine Spirentien beim Kompilieren machte. Ich hatte eigentlich vorsorglich die DCUs gelöscht :?

thx @Robert_G Das ist ja eine sehr feine Sache! :mrgreen:

tommie-lie 13. Feb 2005 09:55

Re: Speicherverbrauch von kleinen Anwendnungen
 
Zitat:

Zitat von OrallY
Zitat:

Zitat von tommie-lie
Nicht, wenn man den von Windows nimmt.

Erklär dich bitte :).

Nimm nicht GetMem() und FreeMem(), die aus der getmem.inc kommen, sondern nimm die von Windows bereitgestellten Funktionen. Alles zu finden unter im SDK unter MSDN-Library durchsuchenMemory Management Functions.
Nicos System.pas und SysInit.pas sind schon das Minimum, wenn es funktionieren soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz