![]() |
Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sparen
Servus,
ich habe mal ein paar Fragen zu Ressourcen, die Delphi selbst erstellt. 1. RCData\DVCLAL und PACKAGEINFO Was hat es denn damit auf sich? In einem anderen Thread habe ich gelesen, dass in DVCLAL wohl irgendwelche Delphi-Versions-/Registrierungs-/Wasauchimmer-Daten stecken. Die verwendeten Packages in PACKAGEINFO sind da schon eher nachvollziehbar. Nur werden die Daten überhaupt gebraucht? Kann es Probleme geben, wenn ich solche Ressourcen lösche? Ich habe testweise schon solche Ressourcen gelöscht und es gab noch keine Probleme mit den Programmen. Wenn DVCLAL irgendwelche Compilerversionsregistrierungswieauchimmerdaten enthält: Darf ich diese Ressource überhaupt löschen? Warum ich frage: Gerade in NonVCL-Programmen versuche ich, die Exe so klein wie möglich zu bekommen - bei einer Gesamtgröße von 20 KB macht ein halbes KB für diese Ressourcen schon was aus. 2. Cursor und Bitmaps Je nach eingebundenen Units werden auch Delphi-Standardcursor und Bitmaps (BB_ABORT von den BitBtns zum Beispiel) eingebunden, können diese Ressourcen "gefahrlos" gelöscht werden, wenn ich sie ganz sicher nicht benötige? 3. Das muss doch auch einfacher gehen Gibt es eine Möglichkeit, Delphi abzugewöhnen, bestimmte Ressourcen zu erstellen? Oder gibt es ein Kommandozeilenprogramm, mit dem man automatisiert bestimmte Ressourcen aus der Exe entfernen kann? |
Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp
Du kannst ja eine eigene Standard-Ressourcendatei erstellen.
In nonVCL-Programmen kannst du das Projekt auch ganz ohne Ressourcen compilieren. Folglich wird nichst davon benötigt. Oder: Probiers einfach mal aus. Lösch alle Ressourcen-Objekte die dir einfallen und schau ob Windows das Prog noch ausführt. |
Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp
Zitat:
Delphi-Quellcode:
erzeugt ebenfalls eine Ressource DVCLAL und PACKAGEINFO (Mit den Units SysInit und System).
program Project1;
begin asm nop; end; end. Zitat:
|
Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp
In einer EXE kannst du das löschen.
DVCAL wird benötigt wenn du mit Packages arbeitest. Unit System/SysUtils verhindert das Laden von Packages einer Professional Version durch eine EXE/Package/Dll erstellt durch eine Standard Version. PACKAGEINFO wird benötigt beim Laden von Packages um auf doppelt verwendete Units innerhalb verschiedener Packages zu überprüfen. Zudem ist diese Resource ebenfalls relevant bei der Initialisierung des Package. Allerdings ist der Verbrauch an Resourcen eher reletiv zu betrachten. Bei einer EXE lohnt es sich eher die Relocation Table zu strippen, da sie weit größer ist. Fast alle EXE Packer führen diesen Schritt durch da unter bisherigen Windows Systemen die EXE immer in den gleichen virtuellen Speicherbereich gemappt wird, ergo nichts innerhalb der EXE an nicht standardkonforme Speicherbereiche gemappt wird. Desweiteren kannst du den EXE Header verkleinern, da zb. unter NT Systemen auch EXE Header mit nur 256 Pageboundary erlaubt sind. Unter Win9x Systemen laufen diese dann aber nicht mehr. Auch hier helfen EXE Packer. Ein solcher Package ist für EXEs durchaus hilfreich, da er dort nur den virtuellen Resourcenverbrauch der EXE erhöht wenn Resourcen involviert sind. Bei Modulenwir DLLs oder Packages würde ich davon abraten. Gruß Hagen |
Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp
Dankeschön, das hilft mir weiter und endlich weiß ich, was hinter dem Mysterium DVCLAL steckt. Die Idee mit dem
![]() ![]() |
Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp
Servus!
Durch Zufall habe ich mir heute die Build.bat aus ![]() ![]() Mit hilft nun eine Verknüpfung im SendTo-Ordner auf folgende Batch-Datei:
Code:
@echo off
reshacker -delete "%1","%1",RCDATA,PACKAGEINFO, reshacker -delete "%1","%1",RCDATA,DVCLAL, stripreloc "%1" /B /C pause >NUL |
Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp
Wie viel Bytes gewinnt man denn da bei einem VCL Projekt? Wenn du eine wirklich kleine Exe willst, dann ist es wohl am effektivsten auf die VCL zu verzichten und einen Exe-Packer zu benutzen. Man sollte aber den Kosten-Nutzen-Faktor berücksichtigen und bei Exe-Packern wissen, was man tut.
|
Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp
Im ersten Beitrag steht was von NonVCL und Dateigrößen um 20 KB :-)
|
Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp
Ich weiß, wie groß / klein Anwendungen ohne die VCL sind:
![]() |
Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp
Achso :lol:
Ich habs mal mit einem leeren Formular ausprobiert (VCL, Delphi 2005 Personal)
Code:
Das kann natürlich gegen UPX nicht mithalten:
375808 bytes
-512 bytes DCVLAL/PACKAGEINFO (Ressourcen) 375296 bytes -22016 bytes Relocation Section (Stripreloc) 353280 bytes -3072 bytes Cursor (Ressourcen) 350208 bytes -10752 bytes Stringtables (Ressourcen) 339456 bytes 9,7 % Differenz
Code:
Das ganze nochmal im Vergleich mit NonVCL (Fenster.dpr sollte Dir bekannt sein :angel2: ):
375808 bytes
-220160 bytes Runtime-Kompression mit UPX 155648 bytes 58,6 % Differenz
Code:
Das Icon hab ich hier allerdings weggelassen. Nimmt man das Delphi2005-Standardicon mit rein, wird die Datei fast dreimal so groß.
15872 bytes
-1024 bytes (Relocation Section und DVCLAL/PACKAGEINFO) 14848 bytes 6,5 % Differenz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 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