Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie kann ich weniger Speicher nutzen? (https://www.delphipraxis.net/26857-wie-kann-ich-weniger-speicher-nutzen.html)

TheMiller 30. Jul 2004 11:48


Wie kann ich weniger Speicher nutzen?
 
Hi,

also, ich schreibe auch zum Teil gaaanz kleine Programme, die echt manchmal nur zwei, drei Funktionen haben. Dennoch haben sie, laut Taskmanager, eine Speicherauslastung von min. 3-5mb. Jetzt habe ich mal von Luckie ein Programm gehabt, das auch ziemlich klein war. UNd das nutze nur !°300kb!

Wie geht das?

Tyrael Y. 30. Jul 2004 11:56

Re: Wie kann ich weniger Speicher nutzen?
 
VCL-Komponenten brauchen meistens sehr viel Speicher.

Luckie macht seine Programme meistens möglichst Non-VCL.

Denke liegt daran.

TheMiller 30. Jul 2004 12:00

Re: Wie kann ich weniger Speicher nutzen?
 
gibt es für VCL keine Möglichkeit?!? Muss doch irgendwie gehen...

mschaefer 30. Jul 2004 12:00

Re: Wie kann ich weniger Speicher nutzen?
 
Moin, DJ-SPM

Tja, das ist die Folge der VCL-Elemente. Du könntest Programme ohne Formulare schreiben. Alle funktionen in den Projektquelltext und an zeigen mit Showmessage. Das schränkt natürlich die Bildschrmdarstellung fundamental ein.

Für kleine Programme halte ich die KOL (geh mal auf Google Suche nach Delphi und KOL) eine gelungene Alternative. Programme die Damt entwickelt wurden haben ab etwa 15kByte.

Grüße // Martin

Phoenix 30. Jul 2004 12:08

Re: Wie kann ich weniger Speicher nutzen?
 
Zitat:

Zitat von DJ-SPM
gibt es für VCL keine Möglichkeit?!? Muss doch irgendwie gehen...

Nein, das kann gar nicht gehen.

Sobal Du bestimmte Units aus der VCL einbindest (z.B. SysUtils ist ein gnadenloser 'Dickmacher'), werden die dort enthaltenen Funktionen automatisch mit einkompiliert. Das vergrössert sowohl Deine .exe als auch den Speicherbedarf des Programmes, da auf jeden Fall schonmal die komplette .exe in den Speicher geladen wird.

Also gibt es tatsächlich nur die Möglichkeit, auf die VCL zu verzichten und wirklich nur die Funktionen die Du brauchst selber zu implementieren, oder aber Du musst den etwas höheren Speicherverbrauch in Kauf nehmen.

TheMiller 30. Jul 2004 12:11

Re: Wie kann ich weniger Speicher nutzen?
 
Naja, ich habe ein Programm mit einem Timer und 7 Forms und da sind locker 13 - 18 MB weg.

Ist das echt in VCL so unvermeidbar?

sakura 30. Jul 2004 12:12

Re: Wie kann ich weniger Speicher nutzen?
 
Zitat:

Zitat von DJ-SPM
Ist das echt in VCL so unvermeidbar?

Echt, ja ;)

...:cat:...

Hansa 30. Jul 2004 12:23

Re: Wie kann ich weniger Speicher nutzen?
 
Zitat:

Zitat von DJ-SPM
Naja, ich habe ein Programm mit einem Timer und 7 Forms und da sind locker 13 - 18 MB weg.

Uff, was sind denn das für Forms ? :gruebel: Habe gerade mal nachgesehen, meine Programme haben 2-4 MB. Da sind Dutzende, eher hunderte Forms dabei, Page-Controls mit 4 Seiten und auf jeder wieder 40 Edits. TChart wird verwendet, SysUtil, DB-Komponenten, Sound, so ziemlich alles. Natürlich MIT Vcl ! Wie kommst Du da auf weit über 10 MB ? :shock:

mschaefer 30. Jul 2004 12:43

Re: Wie kann ich weniger Speicher nutzen?
 
Tja, da steckt bestimmt eine phanomenale Graphic, Avi oder Soundtrack mit im Programm...

Grüße // Martin

Hansa 30. Jul 2004 16:31

Re: Wie kann ich weniger Speicher nutzen?
 
und dann wahrscheinlich noch in EXE eincompiliert. 8)

Matze 30. Jul 2004 16:42

Re: Wie kann ich weniger Speicher nutzen?
 
@DJ-SPM: Schau mal nach, was oben in der Unit/den Units alles unter den uses drinsteht.

Vieles davon brauchst du nicht, es wird jedoch trotzdem in das Programm hineinkompiliert.
Entferne einfach nacheinander die einzelnen eingebundenen Units und kompiliere, wenn keine Fehlermeldung kommt und die Unit nicht automatisch wieder hinzugefügt wird, benötigst du sie nicht.

So lässt sich dann auch etwas Speicher sparen, ob es sehr viel ausmacht, weiß ich nicht, aber etwas weniger wirst du hinterher wohl haben.

DelphiFreund 30. Jul 2004 16:59

Re: Wie kann ich weniger Speicher nutzen?
 
Eigentlich Schade dass da sonst nichts geht. Hab mir auch schon non-vcl angesehen, aber trotz Tuts kapier ichs nicht.

Gruß DelphiFreund

Hansa 30. Jul 2004 17:17

Re: Wie kann ich weniger Speicher nutzen?
 
Die WinApi ist ein fast direkter Zugriff auf das Betriebssytem. Das sollte man aber besser sein lassen. Wenn sich da was ändert, dann kann man sein Programm wegschmeißen. Siehe .NET.

Luckie 30. Jul 2004 18:42

Re: Wie kann ich weniger Speicher nutzen?
 
Und wo ist da die VCL im Vorteil? :gruebel: Sie macht doch nichts anderes als die Win32-API zu kapseln. Ob du nun mit beiden Füßen direkt auf dem Teppich stehst oder ob du mit einer Leiter auf dem Teppich stehst, wenn man ihn dir wegzieht liegst du so oder so auf der Schnautze. :mrgreen:

w3seek 30. Jul 2004 19:05

Re: Wie kann ich weniger Speicher nutzen?
 
Zitat:

Zitat von Hansa
Die WinApi ist ein fast direkter Zugriff auf das Betriebssytem. Das sollte man aber besser sein lassen. Wenn sich da was ändert, dann kann man sein Programm wegschmeißen. Siehe .NET.

Die Windows API hat sich seit Windows 95 nicht veraendert (teilweise sogar seit Windows 3.x) und wird es nie tun wegen der Abwaertskompatibilitaet. Sie wird nur staendig erweitert 8)

Hansa 30. Jul 2004 19:08

Re: Wie kann ich weniger Speicher nutzen?
 
Zitat:

Zitat von Luckie
Und wo ist da die VCL im Vorteil? :gruebel:...

Vorteil ? Das ist alles relativ: Heutzutage interessieren ein paar kB nicht mehr. Warum soll man sich die Mühe machen, deshalb alles selber zu coden ?

Deswegen der Verweis auf .NET. Wer nur die WinApi benutzt, hat eben in Zukunft schlechte Karten. 8) Wer das NICHT tut, der kann ein lauffähiges Programm machen, zumindest mit geringerem Aufwand.

Der von der VCL verursachte Overhead liegt bei ca. 0.5 MB. Dafür mache ich mich doch nicht verrückt. Aber das ist jetzt OT. Es hieß: 7 Forms und 1 Timer. Programm hat 13-18 MB. :shock: Dafür kann unmöglich die VCL verantwortlich sein.

Habe jetzt gerade mal ein neues Projekt angelegt. 1 Form, 1 Button. Größe 460 kB. Dieser Wert erhöht sich durch weitere Verwendung von VCL-Komponenten nur unwesentlich.

Chewie 30. Jul 2004 19:10

Re: Wie kann ich weniger Speicher nutzen?
 
Zitat:

Zitat von Hansa
Habe jetzt gerade mal ein neues Projekt angelegt. 1 Form, 1 Button. Größe 460 kB. Dieser Wert erhöht sich durch weitere Verwendung von VCL-Komponenten nur unwesentlich.

Es geht doch um die Speichergröße des geladenen programms und nicht um die Größe der EXE auf der Platte.

Hansa 30. Jul 2004 19:33

Re: Wie kann ich weniger Speicher nutzen?
 
Dann hat er statische Variablen a la "array [1..10000000] of string" benutzt und gibt sie nicht mehr frei. Und das hat nun absolut nichts mehr mit VCL zu tun. :wink:

sunshine-girl87 31. Jul 2004 12:45

Re: Wie kann ich weniger Speicher nutzen?
 
Ähm, das hört sich jetzt doof an, aber ich (DJ-SPM, nicht Sunshinegirl) habe mich gewaltig vertan... Die Forms und alles bleibt so wie es ist, doch die Speichernutzung liegt bei 8MB - 10MB.

Aber das ist dennoch viel. Keine weitere Graphik, keine Sound o.Ä...

Aber ich schätz es liegt daran, dass der Code nicht gepflegt ist. Ressourcen und Freigaben sollte ich dann doch mal überlegen zu benutzen...

Danke erstmal.

Hansa 31. Jul 2004 13:01

Re: Wie kann ich weniger Speicher nutzen?
 
Bist du vom anderen Ufer ? :shock: :lol:

Was heißt nicht gepflegt ? Die 7 Forms ? Zuallererst würde ich mal mit "Build" da ran gehen, also Projekt -> neu erzeugen. Und davor noch die Debuggereinstellungen überprüfen. Die EXE läuft bestimmt fast über durch einen Haufen Debug-Infos. 8)

Sharky 1. Aug 2004 06:28

Re: Wie kann ich weniger Speicher nutzen?
 
Zitat:

Zitat von DJ-SPM
Naja, ich habe ein Programm mit einem Timer und 7 Forms und da sind locker 13 - 18 MB weg....

Hai DJ-SPM,
erzeugst Du denn alle Forms beim Programmstart? Bei mir wird in der Regel nur meine Main-Form und wenn vorhanden mein TDataModule beim Start erzeugt. Die einzelnen Forms erzeuge ich dann immer erst wenn ich sie brauche.

p0w3r5tr34m3r 1. Aug 2004 07:17

Re: Wie kann ich weniger Speicher nutzen?
 
[OT]
Zitat:

Zitat von Sharky
Die einzelnen Forms erzeuge ich dann immer erst wenn ich sie brauche.

aber es gibt auch schreibfaule menschen, zu denen ich mich auch gelegentlich zählen kann :)
Kommt halt auf die Art des Projektes und die jeweilige Tageslaune den Programmieres an
[/OT]

Powerstreamer

woki 1. Aug 2004 09:52

Re: Wie kann ich weniger Speicher nutzen?
 
[OT]
Zitat:

Zitat von Luckie
Und wo ist da die VCL im Vorteil? :gruebel: Sie macht doch nichts anderes als die Win32-API zu kapseln. Ob du nun mit beiden Füßen direkt auf dem Teppich stehst oder ob du mit einer Leiter auf dem Teppich stehst, wenn man ihn dir wegzieht liegst du so oder so auf der Schnautze. :mrgreen:

An dieser Stelle zwingt mich mein Gewissen gegenüber unbedarften Mitlesern, unserem Nachwuchs?, dann doch formalen Protest eizunlegen...
energischen formalen Protest...
Formal deshalb, weil das Thema hier nicht ausdiskutiert werden kann.

Ich kann aber nicht akzeptieren, das mit diesem Mann-auf-Leiter Analogon die wichtigsten Grundprinzipien moderner Softwarearchitektur ohne jeden Widerspruch vom Tisch gewischt werden.

Das Prinzip ist die Kapselung von Softwarevarebausteinen (hier Anwendungsprogramme) gegen die Details anderer Bausteine (hier Win32 API) durch das Einziehen einer Zwischenschicht (hier VCL). Auch wenn das technisch noch nicht perfekt funktioniert (bei Erzeugung nativen Maschinencodes wie Delphi das tut, bei der JVM funktioniert das perfekt). Anders wäre die Portierung bestehenden Codes nach Linux oder dot net nämlich gar nicht möglich.
Und das ist ein ganz erheblicher Vorteil. Sowohl bei Betriebssystemwechseln, als auch bei Unterschieden zwischen den APIs der verschiedenen Win32 Versionen, und es möge bitte bitte niemand so dreist sein, zu behaupten die gäbe es nicht.
[/OT]

Grüsse
Woki


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.

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