AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Warum wird die Ressource verändert?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum wird die Ressource verändert?

Ein Thema von venice2 · begonnen am 23. Dez 2020 · letzter Beitrag vom 25. Dez 2020
Antwort Antwort
Seite 1 von 2  1 2      
venice2
(Gast)

n/a Beiträge
 
#1

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 13:51
Weil jedes Delphiprogamm eine Unmenge an RTTI Infornmatiion mit einkompiliert. Wenn dich die Grösse stört nimm Delphi 7 oder sonst was altes, das noch ohne RTTI funktioniert. Die neuen Delphikompiler produzieren dank RTTI riesige Dateien, auch wenn sonst nichts im Programm gemacht wird. Das lässt sich leider nicht abschalten.
Traurig.
Das es auch anders geht sehe ich an PowerBasic.
Diesen Müll braucht man nicht wirklich.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 14:03
Welche Compiler-Schalter hast Du denn gesetzt, um die Menge an RTTI-Informationen zu reduzieren?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 14:08
Welche Compiler-Schalter hast Du denn gesetzt, um die Menge an RTTI-Informationen zu reduzieren?
Delphi-Quellcode:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
Ich weis das es nicht kleiner geht aber es will mir nicht in den Kopf warum.
Abhängig vom Compiler Type ist es ohne weiteres möglich kleine Daten zu generieren abhängig von der fast realen Größe an Bit und Bytes.
Das nervt halt manchmal.

Das ist alles an Code..


warum muss die EXE nun 3,5 MB groß sein.
Unter PowerBasic habe ich überhaupt keine Ressource inkludiert.
Und die DLL tut ihr Ding!

Geändert von venice2 (24. Dez 2020 um 03:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.235 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 14:19
Unter PowerBasic habe ich überhaupt keine Ressource inkludiert.
Und die DLL tut ihr Ding!
Und wieso nutzt du dann dafür nicht weiter PowerBasic?
Viele der Vorteile von Delphi bekommt man mit der Komponentenbiliothek.
Wenn du diese nicht nutzt, wieso dann nochmal mit Delphi nachimplementieren?

Meine "kleinste richtige DLL" ist mit 10.2 für Win32 ca. 750kByte.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 14:21
Unter PowerBasic habe ich überhaupt keine Ressource inkludiert.
Und die DLL tut ihr Ding!
Und wieso nutzt du dann dafür nicht weiter PowerBasic?
Viele der Vorteile von Delphi bekommt man mit der Komponentenbiliothek.
Wenn du diese nicht nutzt, wieso dann nochmal mit Delphi nachimplementieren?

Meine "kleinste richtige DLL" ist mit 10.2 für Win32 ca. 750kByte.
Es geht nicht darum warum, weshalb sondern das es möglich ist!
Das ist der kleine Unterschied.

Und was verstehst du unter richtige DLL denkst du meine wäre falsch?
Sie tut was sie soll.

Geändert von venice2 (29. Dez 2020 um 13:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.235 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 14:37
Es geht nicht darum warum, weshalb sondern das es möglich ist!
Das ist der kleine Unterschied.
Klar ist es möglich. Aber Delphi ist halt nicht darauf ausgelegt kleine DLLs zu erzeugen.
Und wenn es nicht ohne sehr große Klimmzüge möglich ist, akzeptiert man einfach das es so ist oder nimmt einfach eine andere IDE, welche das kann.

Und was verstehst du unter richtige DLL denkst du meine wäre falsch?
Es gibt sogenannte Ressourcen-DLLs die können noch kleiner werten, da sie keine Ausführbaren Code beinhalten.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.119 Beiträge
 
Delphi 12 Athens
 
#7

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 18:34
Ich weis das es nicht kleiner geht aber es will mir nicht in den Kopf warum.
warum muss die EXE nun 3,5 MB groß sein.
Die RTTI sorgt u.a. dafür, dass du Funktionen, Objekteigenschaften usw. über den Namen ansprechen kannst. Damit kannst du auch solche verwenden, die im Code nie verwendet werden. Entfernt der Compiler diese Funktionen dann trotzdem, knallt es sobald jemand diese per RTTI verwenden möchte.
Umgekehrt verwenden Delphis Units intern selbst die RTTI, so dass sich diese auch nicht einfach so abschalten lässt, denn dann würde da wiederum manches nicht mehr funktionieren.

Du verwendest ein paar Funktionen, die dazu führen, dass viele bzw. große Units einkompiliert werden.

Original sind es bei mir 2516 KiB als Release (ohne deine Ressource und die INI-Unit).
Entfernst du einfach nur die VCL-Units Vcl.Clipbrd (Clipboard.AsText) und Vcl.Printers (AssignPrn, Printer.Canvas), halbiert sich die Größe schon auf 1206 KiB.
Entfernst du dann noch die Unit System.IOUtils (die in der Unit gar nicht verwendet wird) landest du schon bei nur noch 255 KiB.

Die Unit System.SysUtils würde nun noch knapp 100 KiB sparen, ist aber nicht so einfach zu ersetzen.

Unter PowerBasic habe ich überhaupt keine Ressource inkludiert.
Und die DLL tut ihr Ding!
PowerBasic kann z.B. Funktionen nicht über den Namen ansprechen, weil es so etwas wie die RTTI dort nicht gibt. Deshalb werden dafür eben auch keine Informationen einkompiliert. Und auch die vorhandenen Bibliotheksfunktionen können ja deutlich weniger als bei Delphi.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
658 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 14:12
Diese Compilerswitches bringen nicht wirklich was, weil diese nur auf den eigenen Code Auswirkung hat. Um das ganze RTTI Zeugs in dene Basis Units zu entfernen, müsste die Delphi Basisklassen (System, Classes, etc) neu ohne RTTI kompiliert werden. Das geht aber nicht so einfach, wie man meinen könnte. Eigentlch ist das unmöglich, weil man die System untis nicht neu konmpilieren kann.

OP du kannst ja mal folgende Switsches verwenden, wird dir aber wegen obigen Gründen auch nicht wirklich weiterhelfen.
Code:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

Geändert von Rolf Frei (23. Dez 2020 um 14:36 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#9

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 14:15
Diese Compilerswitches bringen nicht wirklich was, weil diese nur auf den eigenen Code Auswirkung hat. Um das ganze RTTI Zeugs in dene Basis Units zu entfernen, müsste die Delphi Basisklassen (System, Classes, etc) neu ohne RTTI kompiliert werden. Das geht aber nicht so einfach, wie man meinen könnte. Eigentlch ist das unmöglich, weil man die System untis nicht neu konmpilieren kann.

OP du kannst ja mal folgende Switsches verwenden, wird dir aber wegen obigen Gründen auch nicht wirklich weiterhelfen.
Code:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
Habe ich schon drin siehe Code oben.
Na bringt max 200 KB.

Ich wollte nur sagen das es mich nervt.
Wenn es nicht anders abschaltbar ist dann ist gut.
Aber trotz alle dem es geht auch anders.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
658 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 14:40
Diese Compilerswitches bringen nicht wirklich was, weil diese nur auf den eigenen Code Auswirkung hat. Um das ganze RTTI Zeugs in dene Basis Units zu entfernen, müsste die Delphi Basisklassen (System, Classes, etc) neu ohne RTTI kompiliert werden. Das geht aber nicht so einfach, wie man meinen könnte. Eigentlch ist das unmöglich, weil man die System untis nicht neu konmpilieren kann.

OP du kannst ja mal folgende Switsches verwenden, wird dir aber wegen obigen Gründen auch nicht wirklich weiterhelfen.
Code:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
Habe ich schon drin siehe Code oben.
Na bringt max 200 KB.

Ich wollte nur sagen das es mich nervt.
Wenn es nicht anders abschaltbar ist dann ist gut.
Aber trotz alle dem es geht auch anders.
Ja hast deine Nachricht nach meiner geschrieben. Übrigens hat die Grösse der EXE praktisch nichts mit den Resourecen zu tun. Das was bei dir in den Resourcen ist, sind Formen (DFM-Daten die als Resoruce reingelinkt werden) aus der Basisbibliothek von Delphi. Diese machen aber dein Progamm nicht wirklich massiv grösser. Das Problem ist die RTTI, die bei allen Delphi Basisklassen mit reinkompiliert wurden. Um das zu umgehen. müsstest du alle Delphi DCS's neu durchkompileren und bei allen die RTTI Flags setzen. Das geht aber leider nut therotisch und in der Praxis ist das praktisch unmöglich. Wollte das selber schon mal machen und habe dann aber relativ schnell aufgegeben.

Eben mal getestet:
Eine minimale Consolenapp, die nur die SysUtils nutzt, ist nun mit aktuellen Delphi's im Release Build um die 150 KB. Bei D7 wird eine leere Consoleapp 41 KB gross. Sobald du da bestimmte Untis verwendest explodiert das und du hast dann >2 MB. In deinem Fall sind die Untis Clipprd, Printers und IOUtils dafür verantwortlich.

Hats du deine exe mit dem Release Build kompiliert oder nur mit Debug?

Geändert von Rolf Frei (23. Dez 2020 um 14:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:35 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