AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sparen
Thema durchsuchen
Ansicht
Themen-Optionen

Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sparen

Ein Thema von Daniel Schuhmann · begonnen am 4. Dez 2005 · letzter Beitrag vom 23. Dez 2005
Antwort Antwort
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#1

Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sparen

  Alt 4. Dez 2005, 19:44
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?
Daniel Schuhmann
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp

  Alt 4. Dez 2005, 20:14
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.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp

  Alt 4. Dez 2005, 20:27
Zitat von ichbins:
In nonVCL-Programmen kannst du das Projekt auch ganz ohne Ressourcen compilieren. Folglich wird nichst davon benötigt.
Das stimmt so nicht. Dieses Programm:

Delphi-Quellcode:
program Project1;

begin
  asm
    nop;
  end;
end.
erzeugt ebenfalls eine Ressource DVCLAL und PACKAGEINFO (Mit den Units SysInit und System).

Zitat von ichbins:
Oder: Probiers einfach mal aus. Lösch alle Ressourcen-Objekte die dir einfallen und schau ob Windows das Prog noch ausführt.
Probiert hab ich es ja, funzt ja soweit auch alles. Aber die bösen Fallen lauern überall.
Daniel Schuhmann
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp

  Alt 5. Dez 2005, 11:51
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
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp

  Alt 5. Dez 2005, 12:18
Dankeschön, das hilft mir weiter und endlich weiß ich, was hinter dem Mysterium DVCLAL steckt. Die Idee mit dem Stripreloc ist sehr gut, das spart ja nochmals 1024 Bytes ein.
Daniel Schuhmann
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp

  Alt 23. Dez 2005, 11:05
Servus!

Durch Zufall habe ich mir heute die Build.bat aus Nicos Mini-Exe-Projekt angesehen und bin dadurch auf die Lösung zum automatischen Löschen der nicht benötigten Ressourcen gekommen.

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
Daniel Schuhmann
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp

  Alt 23. Dez 2005, 11:09
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp

  Alt 23. Dez 2005, 11:36
Im ersten Beitrag steht was von NonVCL und Dateigrößen um 20 KB
Daniel Schuhmann
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp

  Alt 23. Dez 2005, 11:41
Ich weiß, wie groß / klein Anwendungen ohne die VCL sind: Win32 API Tutorials für Delphi Aber ich wollte wissen, wie viel du bei einer VCL Anwendung gewinnst, wenn du die überflüssigen Ressourcen rauslöschst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sp

  Alt 23. Dez 2005, 12:11
Achso

Ich habs mal mit einem leeren Formular ausprobiert (VCL, Delphi 2005 Personal)

Code:
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
Das kann natürlich gegen UPX nicht mithalten:

Code:
 375808 bytes
-220160 bytes Runtime-Kompression mit UPX
 155648 bytes

58,6 % Differenz
Das ganze nochmal im Vergleich mit NonVCL (Fenster.dpr sollte Dir bekannt sein ):

Code:
15872 bytes
-1024 bytes (Relocation Section und DVCLAL/PACKAGEINFO)
14848 bytes

6,5 % Differenz
Das Icon hab ich hier allerdings weggelassen. Nimmt man das Delphi2005-Standardicon mit rein, wird die Datei fast dreimal so groß.
Daniel Schuhmann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 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