5 Stimmen

Warum benötigt meine Anwendung mehr Speicherplatz, nachdem ich sie mit UPX komprimiert habe, und was kann ich dagegen tun?

Ich verwende den UPX-Kompressor, um meine in Delphi XE geschriebene Anwendung zu komprimieren. Die Dateigröße sinkt von etwa 32 MB auf 8 MB.

Was mir allerdings aufgefallen ist, ist, dass die Belegung des Arbeitsspeichers beim Ausführen der komprimierten Datei erheblich zunimmt. Von 25/30 Mb geht auf etwa 80 Mb. Ist das normal oder ist es ein Problem, das Sie behalten sollten? In meinem Fall, da die Anwendung auf Windows Server 2008 Remote-Desktop-Modus mit mehreren Benutzern ausgeführt wird, wiegt das System überproportional.

Warum ist das so? Wie kann ich dieses Problem lösen?

23voto

Rob Kennedy Punkte 158781

So funktionieren EXE-Kompressoren. Sie komprimieren die Plattendatei , nicht die ausführbarer Code . Um die komprimierte Datei wieder ausführbar zu machen, muss sie dekomprimiert werden, und diese unkomprimierten Daten werden im Speicher abgelegt. Bei einer normalen, nicht komprimierten EXE-Datei lädt das Betriebssystem nur die Teile der Datei, die im Moment benötigt werden. Der Rest kann auf der Festplatte bleiben. Da sich Ihre gesamte unkomprimierte Anwendung im Arbeitsspeicher befindet, erscheint Ihr Speicherverbrauch höher.

Außerdem kann die Festplattendatei von mehreren Benutzern gemeinsam genutzt werden, während der Speicher, der die unkomprimierte ausführbare Datei enthält, nicht gemeinsam genutzt wird. Jeder Benutzer, der Ihr Programm ausführt, hat eine eigene Kopie des unkomprimierten Programms.

Die 26 MB Speicherplatz, die Sie durch die Komprimierung Ihres Programms einsparen, sind praktisch nichts auf einem gemeinsam genutzten Remote-Desktop-Server. Machen Sie sich nicht die Mühe, die Datei zu komprimieren. Wenn Sie die Datei komprimieren möchten, um bei der Verteilung Bandbreite zu sparen, verpacken Sie Ihr Programm in ein Installationsprogramm, das die Datei einmal bei der Installation dekomprimiert, statt in einen EXE-Kompressor, der die Datei jedes Mal dekomprimieren muss, wenn jemand sie ausführt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X