Re: .exe Dateigröße
Zitat:
selbst mit der vcl. eine leere konsolen applikation erstellt mit devcpp(mingw) hat bei mir bereits +460kb (mit cstdlib und iostream). es ist eben nicht alles gold was glaentzt ;) |
Re: .exe Dateigröße
Zitat:
|
Re: .exe Dateigröße
@Counter909,
(Simple Erklärung zu UPX & Co) Also UPX ist eine schlechte Idee. Dieses Tool komprimiert die Datei nur also eine Art selbst entpackendes Archiv für Exe-Datein. Wenn solch eine komprimierte Exec gestartet wird entpack sich diese im Hauptspeicher. Dazu kommt noch mal die Grösse der Exec. D.h. mit UPX lädt man sich das Programm zwei mal in den Speicher. Das Tool macht also nur bei kleinen Dateien und oder zu Transportzwecken für USB-Stick oder Internet Sinn wenn man es nicht in ein Zip.- Rar.- oder anderes Archiv packen kann oder darf. Die Grösse der Exec's: Die normale VCL - Standard Delphi Anwendungen enthält Units und Libarys die dem Programmierer das programmieren erleichtern. So braucht sich dieser nicht explizit zB. um das Erstellen einer Form (eines Fensters) oder eines Buttons sowie "Fehlerabfangroutinen" zu kümmern. Eine solche erzeugte Datei ist nun rund 500 KByte gross. Will man das nun vermeiden kann man auch ohne die VCL programmieren. ( Stichwort nonVCL ) Der Nachteil ist das der Programmierer sich nun um alles selbst kümmern muss (zB. um das Erstellen des Fensters, Buttons o.ä.). Der Vorteil eine kleine Exec.-Datei. Die Grösse der Datei ist dafür minimal. Ein kleines Programm kann so zB. bei rund 20 KBytes liegen. Beispiele.: Standard - VLC Anwendung mit einem Fenster:
Delphi-Quellcode:
Die Grösse der Exec.-Datei beträgt nun schon ~ 400 kBytes.
// - 1 ---------------------------------------------------------------------
program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. // - 2 --------------------------------------------------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} end. Standard - nonVLC Anwendung mit einem Fenster:
Delphi-Quellcode:
Die Grösse der Exec.-Datei beträgt nun nur ~12 Bytes.
program Project1;
(* {$R 'resource.res' 'resource.rc'} *) uses Windows, Messages; const wndClassName = 'mWndClass'; wndAppTitle = 'nonVCL'; WndWidth = 320; WndHeight = 240; var hWndApp: Cardinal; function WndProc(_hWnd: HWND; _Msg: UINT; _wParam: wParam; _lParam: LParam): lresult; stdcall; var x, y : integer; begin Result := 0; case _Msg of WM_CREATE: begin // Fenster zentrieren x := GetSystemMetrics(SM_CXSCREEN); y := GetSystemMetrics(SM_CYSCREEN); MoveWindow(_hWnd, (x div 2) - (WndWidth div 2), (y div 2) - (WndHeight div 2), WndWidth, WndHeight, TRUE); end; WM_DESTROY: PostQuitMessage(0); else Result := DefWindowProc(_hWnd, _Msg, _wParam, _lParam); end; end; var WndClass: TWndClass; msg: TMsg; BEGIN with WndClass do begin // cbSize := SizeOf(TWndClassEx); Style := CS_HREDRAW or CS_VREDRAW; lpfnWndProc := @WndProc; cbClsExtra := 0; cbWndExtra := 0; hbrBackground := COLOR_APPWORKSPACE; lpszMenuName := nil; lpszClassName := wndClassName; // hIconSm := 0; hInstance := hInstance; hIcon := LoadIcon(hInstance, MAKEINTRESOURCE(100)); hCursor := LoadCursor(0, IDC_ARROW); end; // Fenster registrieren RegisterClass(WndClass); // Fenster erzeugen hWndApp := CreateWindow( wndClassName, WndAppTitle, WS_OVERLAPPEDWINDOW, INTEGER(CW_USEDEFAULT), INTEGER(CW_USEDEFAULT), WndWidth, WndHeight, 0, 0, hInstance, nil); // Fenster anzeigen UpdateWindow(hWndApp); ShowWindow(hWndApp, SW_SHOW); // Nachrichtenschleife while GetMessage(msg,0,0,0) do begin TranslateMessage(msg); DispatchMessage(msg); end; UnRegisterClass(WndClassName, HInstance); ExitCode := msg.wParam; END. Ist es nicht Notwendig ein Fenster zu erzeugen kann man sich auch mit einer Art Misch aus beiden Programiervarianten behelfen:
Delphi-Quellcode:
Die Grösse der Exec.-Datei beträgt nun ca. 45 kBytes.
program Project1;
uses Windows, SysUtils; function Addiere(ValueA, ValueB: integer): integer; begin Result := ValueA + ValueB; end; procedure Machwas; begin MessageBox(0, PCHAR(IntToStr(Addiere(100, 23))), 'Hallo:', MB_OK); end; BEGIN Machwas; MessageBox(0, PCHAR(TimeToStr(now)), 'Die Uhrzeit ist:', MB_OK); END. // Edit: Doppelmoppel entfernt. |
Re: .exe Dateigröße
Zitat:
|
Re: .exe Dateigröße
Zitat:
Ausserdem ist es heut zu Tage irgend wie Mode den Speicher zuzumüllen. :gruebel: Zitat:
verwendet werden soll. Das Was die Exec. aufbläht sind u.A. die Units Forms, Classes, Variants. Andere Units wie zB. Graphics, Dialogs bedingen die Units Classes, Forms, Sysutils etc. Zitat:
Wer sich mit nonVCL auskennt weiss was bei der VCL programmierung im Hintergrund abgeht... :mrgreen: |
Re: .exe Dateigröße
Zitat:
|
Re: .exe Dateigröße
Hallo, ich nutze ASPACK...Exe um 30-50% kleiner! :-D
|
Re: .exe Dateigröße
Zitat:
1, Internet Übertragungskapazität spare ich sichere wenn ich die Exe mit einem 0815-Komprimierungstool komprimiere . 2, RAM kann ich durch einen Exe-Packer nicht aus den bekannten Gründen sparen (Exe wird im Speicher dekomprimiert). Ebenfalls sorgt Windows dafür das nicht benötigter Speicherbedarf aus der Exe bei bedarf neu geladen wird. 3, Will ich platz auf der Festplatte sparen, so kann ich doch die Festplatte als ganzes oder die entsprechenden Verzeichnisse als einzelnes komprimieren. Was bleibt also übrig außer einer kleinere Zahl im Windows Explorer? |
Re: .exe Dateigröße
Wenn ich eine Exe per ISDN/Modem DFÜ Remote austausche und auf dem remote PC alles gesperrt ist(winzip etc.)
geht es schneller wenn ich die .exe mit UPX von 3mb auf 500kb verkleinere(Arbeitsspeicher ist egal weil es die einzigste Sofware auf dem PC ist(Visualisierungs PC)). Eine andere Software die nur auf einem usbstick gespeichert ist verkleinert sich von 2mb auf 300kb |
Re: .exe Dateigröße
Zitat:
Und wenn es auf den Transport ankommt, dann sind normale Packer wesentlich besser geeignet, da sie nicht wie UPX bei der Ausführung des Programmes, das Speichermanagment von Windows aushebeln. Und wenn kein Entpacker auf dem Zielsystem vorhanden ist, dann kann man immer noch selbstentpackende Archive erstellen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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