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 2 von 4     12 34      
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 15: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
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 15: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 15:44 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#13

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 15:42
Ok es ist wie es ist damit muss ich dann leben. Danke.
Zitat:
Hats du deine DLL mit dem Release Build kompiliert oder nur mit Debug?
Release..

Geändert von venice2 (23. Dez 2020 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#14

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 15:50
Zitat:
Das Problem ist die RTTI
und die Generics (bzw. der unschön generierte Code daraus)

Bei Code kann der Compilier/Linker auch Ungenutztes weglassen,
aber bei eingebundenen RES, kann er nicht erkennen, ob nötig oder nicht.
Sobald ein {$R irgendwas.res} in einer einkompilierten Unit drin steckt, dann bleibt es drin, selbst wenn der verwendende Code garnicht benutzt und vom daher vom Linker weggelassen wurde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#15

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 15:53
Zitat:
Sobald ein {$R irgendwas.res} in einer einkompilierten Unit drin steckt, dann bleibt es drin, selbst wenn der verwendende Code garnicht benutzt und vom daher vom Linker weggelassen wurde.
Keine Ahnung ob den den besagten Units (Clipprd, Printers und IOUtils) eine Res eingebunden ist.
Im Meinem Projekt habe ich diese komplett entfernt aber lach. Sie wird trotzdem eingebunden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#16

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 15:57
Du kannst dir vom Compiler die MAP-Datei erstellen lassen (Projektoptioen),
da steht alles drin, was drin ist.

Oder du schaust kurz in die PACKAGEINFO-Ressource.
Die ist zwar binär, aber die Unitnamen kann man auch so erkennen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 17:43
Zitat:
Sobald ein {$R irgendwas.res} in einer einkompilierten Unit drin steckt, dann bleibt es drin, selbst wenn der verwendende Code garnicht benutzt und vom daher vom Linker weggelassen wurde.
Keine Ahnung ob den den besagten Units (Clipprd, Printers und IOUtils) eine Res eingebunden ist.
Im Meinem Projekt habe ich diese komplett entfernt aber lach. Sie wird trotzdem eingebunden.
Wie gesagt sind diese Resourcen minimal und machen die Exe nicht wirklich grösser. Wir reden hier von ein paar KB. Wenn du Texte mit resourcestring definiest, und davon gibt es seher viele in den Delphi Basis Units, kommen diese auch in die Resource der Exe (stringtable). Die MSG_xxx, etc. sind glaube ich die Symbole für Delphi Messageboxen. Die Cursors sind die Mauszeiger Symbonlresourcen, die über eine Unit hineinkommen (Classes?). DVCLAL ist eine spezielle Resource, die der Conmpiler automatisch einfügt und die Infos darüber enhält mit welcher Delphiversion sie erzeugt wurde.

Betreffs meinen gelisteten Units hast du da was falsch verstanden. Es geht dabei nicht um die Resourcen die daruch grösser werden sondern die Exe selber durch die zusätzlichen RTTI Informationen, die nicht in der Resource abgelegt werden. Also vergiss bitte die Resourcen, die sind nicht dein Problem hier, was die Grösse betrifft.

Habe nun mal die Sourcen angeschaut und dabei gesehen, dass die Forms Unit in Printers genutzt wird. Das macht deine Exe so gross. Wenn du die Printers Unit entfernst und alles selber machst, was sonst die Printers Unit macht, dürfte die Grösse schon mal deutlich kleiner werden, sofern natürlich diese Forms Unit nur da genutzt wird. Wenn du es schafst, dass die Forms unit nicht mehr in deine Exe gelinkt wird, wirst du dann eine deutlich kleinere EXE bekommen.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#18

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 17:48
Zitat:
Betreffs meinen gelisteten Units hast du da was falsch verstanden.
Nein ich habe das schon richtig verstanden.
Meine Antwort bezog sich auf die Info von himitsu bzg.
Zitat:
Sobald ein {$R irgendwas.res} in einer einkompilierten Unit drin steckt, dann bleibt es drin, selbst wenn der verwendende Code garnicht benutzt und vom daher vom Linker weggelassen wurde.
Ob diese Units Ressourcen verwenden oder nicht.
Denn bei mir werden sie immer eingebunden egal ob ich da etwas definiert habe oder nicht.

Das die RTTI das Problem ist habe ich schon verstanden. Danke
  Mit Zitat antworten Zitat
Rolf Frei

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

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 18:02
RTTI ist nur ein Teil des Problems, der andere und hier vieleicht der entscheidendere ist, dass die Forms unit verwendet wird. Das macht den grössten Unterschied. Kommentiere doch mal bei dir die Printers Unit und allen Code aus, der diese nutzt und compiliere dann. Beachte bitte auch deine uIni Unit, was da genau benutzt wird. Die Exe sollte dann deutlich kleiner werden. Das ist ein Problem dass seit jeher besthet und nichts mit RTTI zu tun hat sondern damit, dass die Forms Unit so viele Abhängikeiten hat, dass alles mögliche in die Exe gelinkt wird, was man eigentlich in deimem Fall garnicht braucht. Meine Test-Consolenanwendung in D7 wächst durch die Verwendung von Printes auch von 41 KB auf 393 KB. In neueren Delphi's macht das noch deutlich mehr aus.

Geändert von Rolf Frei (23. Dez 2020 um 18:06 Uhr)
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#20

AW: Warum wird die Ressource verändert?

  Alt 23. Dez 2020, 18:12
Weil jedes Delphiprogamm eine Unmenge an RTTI Informationen mit reinkompiliert. 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.
Aber die RTTI Informationen liegen doch nicht in den Ressourcen.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott

Geändert von generic (23. Dez 2020 um 18:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 17:50 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