![]() |
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? |
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. |
Re: Wie kann ich weniger Speicher nutzen?
gibt es für VCL keine Möglichkeit?!? Muss doch irgendwie gehen...
|
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 |
Re: Wie kann ich weniger Speicher nutzen?
Zitat:
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. |
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? |
Re: Wie kann ich weniger Speicher nutzen?
Zitat:
...:cat:... |
Re: Wie kann ich weniger Speicher nutzen?
Zitat:
|
Re: Wie kann ich weniger Speicher nutzen?
Tja, da steckt bestimmt eine phanomenale Graphic, Avi oder Soundtrack mit im Programm...
Grüße // Martin |
Re: Wie kann ich weniger Speicher nutzen?
und dann wahrscheinlich noch in EXE eincompiliert. 8)
|
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. |
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 |
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.
|
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:
|
Re: Wie kann ich weniger Speicher nutzen?
Zitat:
|
Re: Wie kann ich weniger Speicher nutzen?
Zitat:
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. |
Re: Wie kann ich weniger Speicher nutzen?
Zitat:
|
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:
|
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. |
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) |
Re: Wie kann ich weniger Speicher nutzen?
Zitat:
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. |
Re: Wie kann ich weniger Speicher nutzen?
[OT]
Zitat:
Kommt halt auf die Art des Projektes und die jeweilige Tageslaune den Programmieres an [/OT] Powerstreamer |
Re: Wie kann ich weniger Speicher nutzen?
[OT]
Zitat:
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 02:10 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