2009-12-14 3 views
9

Ich habe eine Abfrage über die Option in Delphi mit oder ohne Laufzeit-Packages (Projekt-> Optionen-> Pakete) zu erstellen.
Die Größe der ausführbaren Datei scheint kleiner zu sein (389 KB), wenn ich das Kontrollkästchen "Build mit Laufzeit-Paketen" im Vergleich zu dem Kontrollkästchen (3.521KB) aktiviert habe. Warum ist das der Fall?Warum macht das Erstellen von Laufzeitpaketen die EXE-Datei kleiner?

Ich habe so viele Probleme beim Erstellen einer Installationsdiskette für sie und kann nicht herausfinden, welche Dateien in der Installation enthalten sein sollten. Ich frage mich, ob das etwas damit zu tun haben könnte, aber ich habe beide Möglichkeiten schon ausprobiert.

+1

Ich bin darüber auch neugierig. Ich benutze EurekaLog, und es ist Speicherleck-Fähigkeit funktioniert nicht, wenn Sie ohne Laufzeitpakete erstellen. Also habe ich ein paar Tage damit verbracht, die Notwendigkeit dafür zu beseitigen. Um Ihre Frage zu beantworten, bin ich auch neugierig, ob es sich lohnt, WITH-Laufzeitpakete für einen Debug-Build und OHNE für einen Release-Build zu erstellen, und wenn ja, wie kann das geschehen? – lkessler

Antwort

14

Wenn Sie mit Laufzeitpaketen erstellen, werden VCL und RTL aus den Paketen geladen, sodass ihr Code nicht mit Ihrer EXE verknüpft werden muss. So wird die EXE kleiner, aber die Gesamtinstallation wird größer, da Sie Smart Linking nicht verwenden können, um die Größe der Pakete zu reduzieren.

Wie Sie bereits bemerkt haben, führt die Verwendung von Paketen zu Problemen bei der Speicherlecksuche und zu Problemen beim Debugging. Im Allgemeinen lohnt es sich, sie zu verwenden, wenn Sie Plugins verwenden, die auch Laufzeitpakete benötigen.

+5

Es ist auch vorteilhaft, wenn Sie viele verschiedene Anwendungen auf einer Maschine laufen lassen, die alle die VCL verwenden - es ist sinnlos, sie mehrmals in den Speicher zu laden. –

+1

+1 Und selbst im Secenario, wo Plugins sie brauchen, ist es fast immer besser, sie so zu gestalten, dass sie keine Laufzeitpakete benötigen. Da diese Plugins beim Erstellen der App in einer neueren Delphi-Version alle kaputt gehen, könntest du niemals auf neuere Tools upgraden, und die Plugin-Autoren könnten das auch nicht. –

+1

Abgesehen von Gigabytes RAM auf den meisten PCs, die Probleme mit der Version und die Idee, dass eine falsche BPL von irgendwo in meinem Pfad geladen werden könnte (DLL hell == BPL Hölle) halten viele Leute davon ab, jemals solche zu verwenden eine Technologie in der Praxis. Die Möglichkeit, vollständig "Side-Along" zu betreiben, wäre großartig, wenn BPLs nur lokal geladen werden könnten und die System-PATH-Umgebung ignoriert würde. –

0

Ich weiß nichts über D2010, aber in D2006 gibt es eine Option im Projektmenü namens "Information for ProjectName".

Dies zeigt Ihnen, welche Pakete nach dem Kompilieren enthalten sind.

Wie Mason festgestellt hat, ist die Verwendung von Laufzeitpaketen und einige Nachteile jedoch wenig vorteilhaft.

9

Die bisherigen Antworten vermissen einen entscheidenden Punkt: Runtime-Pakete sind genauso nützlich wie DLLs, wenn Sie eine Reihe von Anwendungen haben, die zusammenarbeiten und zusammen installiert werden. Sie könnten natürlich die VCL- und Drittanbieter-Bibliotheken in alle von ihnen einbinden, indem Sie sie ohne Pakete erstellen, aber abhängig von der Anzahl der Anwendungen und verwendeten Bibliotheken wird die Größe dieser Anwendungen größer als die Größe von ihnen zusammengebauten Laufzeitpaketen plus die Größe dieser Laufzeitpakete. Dies wird für größere Setup-Pakete sorgen, was nicht das große Problem ist, das es einmal war.

Aber mit all diesen Anwendungen zur gleichen Zeit wird auch eine viel höhere Belastung für das System bringen. Da jede Anwendung ihre eigene Kopie der VCL und der anderen Bibliotheken verwendet, müssen alle diese von der Platte in den Speicher geladen werden, was mehr E/A verursacht. Und dann wird es mehrere Kopien von ihnen im Speicher geben, die jeweils Platz für den Code benötigen. Wenn Laufzeitpakete verwendet werden, hat jede Anwendung ihren eigenen Speicherbereich für Daten, aber sie teilen alle die gleiche Kopie des Paketcodes im Speicher.

Für eine einzelne in sich geschlossene Anwendung ohne besondere Bedürfnisse definitiv ohne Pakete zu bauen.

+0

Wie viel der typischen 4 GB Speicher ist gefüllt? Wie auch immer, es gilt immer noch etwas, denn Cache ist auch Speicher und ziemlich teuer. Dennoch denke ich, ist mehr ein theoretischer Fall, da nicht alle Seiten der RTL/VCL auch aktiv sind. –

+1

Nun, nennen Sie mich altmodisch, aber genug Speicher zu haben ist kein Grund, es zu verschwenden. Diese Art von Denken hat uns den traurigen Zustand der Software gebracht, die wir heute haben. Meine aktuelle Maschine hat 4000 Mal mehr RAM und 20000 Mal mehr Festplattenspeicher als mein erster PC, aber es fühlt sich an, als wären diese zusätzlichen Ressourcen verschwendet ... – mghie

+0

Ich komme ursprünglich aus der Chemie, und es gibt keinen Ersatz für Messungen und ein Gefühl für Größen. Dieser Sinn ist stärker als die "Abfall" -Reaktion. –

1

Einer der Hauptgründe für die Verwendung von Laufzeitpaketen ist, wenn Sie Modulgranularität für die Bereitstellung/Aktualisierung über ein Medium benötigen, das keine großen Dateien akzeptiert, z. B. über eine Leitung mit niedriger Bandbreite.

Da die Laufzeit-Pakete gleich bleiben, bis Sie Ihre Delphi-Version ändern - wie für immer noch für D7 ;-) - ermöglicht es, neue Versionen oder neue Anwendungen ohne die Nutzlast der RTL/VCL zu implementieren.

Aber wie bei DLLs müssen Sie mit der Versionierung vorsichtig sein.

+0

Bedeutet es, wenn ich mit Laufzeit-Paketen gebaut habe, muss ich die Pakete separat versenden? Tut mir leid, wenn das eine dumme Frage ist. – Snackmoore

+1

Sie müssen die Pakete mit Ihrer Anwendung versenden - und sehr vorsichtig sein, wenn Sie sie installieren, um neuere Versionen nicht zu überschreiben (Aktualisierungspakete können auch aktualisiert werden). Ein gutes Installationsprogramm, das Versionen korrekt überprüft, wird empfohlen. –

+1

snackmoore würden die meisten Delphi-Entwickler niemals mit Laufzeitpaketen auf einem fertigen Build bauen, das an Kunden ausgeliefert wird, es sei denn, sie möchten auch ihre eigene Arbeit erschweren. BPL-Pakete machen dir das Leben einfach schwerer, außer du brauchst sie wirklich aus irgendeinem Grund (die anderen Antworten sagen dir, warum du sie vielleicht brauchst), dann brauchst du es nicht, also lass es sein. –

3

In Bezug auf Ihre Frage "Welche Dateien sollten in der Installation enthalten sein": Sie können Dependency Walker verwenden, um die Bibliothek Abhängigkeiten aufzuspüren.

Verwandte Themen