![]() |
Erzeugt Delphi größere/langsamere Projekte mit Generics?
Ich habe vor Kurzem gehört, dass die Verwendung von Generics in Delphi angeblich größere und langsamere ausführbare Dateien mit aufgeblähtem Code erzeugen soll.
Ist da was dran, hat da jemand negative Erfahrungen gemacht? Ich konnte das bisher nicht feststellen. Die einzigen Generics die ich nutze sind z.B. TArray<Byte> statt Array of Byte und solche Sachen. |
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Die EXE-Datei wird etwas größer, weil der Compiler die verschiedenen Typisierungen Deiner generischen Klassen jeweils vollständig ablegt. Das ist in den letzten Versionen tendenziell besser geworden.
Auf die Geschwindigkeit hat dies keinerlei Einfluss - mal ausgenommen die Tatsache, dass ein paar Hundert KBytes mehr von der Festplatte gelesen werden müssen. |
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Bedeutet das, dass das nicht-verwenden von Generics trotzdem besser ist?
|
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Wieso sollte das besser sein? Du hast Typsicherheit bereits zur Entwicklungszeit, kannst Deine Klassen in einem gewissen Rahmen schön allgemeingültig halten und musst keine zig Ableitungen schreiben usw. usf.
|
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Hallöle...:wink:
Zitat:
:zwinker: |
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Zitat:
Delphi-Quellcode:
MeinTyp(ObjectListenEintrag.Items[iIndex]) ...
|
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Zitat:
|
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Zitat:
...:cat:... |
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Hallo,
Zitat:
Zitat:
Aber prinzipiell machen Generics es einfacher, weil man halt nicht für jedes Objekt eine eigene Listenklasse braucht. |
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Zitat:
Zitat:
|
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Delphi-Quellcode:
EinFalscherTyp(ObjectListenEintrag.Items[iIndex]) ...
Das kompiliert zwar und du siehst toll im Code was du denkst das dort sein soll, aber wenn es das nicht ist, dann knallt es im laufenden Programm schnell mal oder macht einfach sonstwas und nicht das was du eigentlich wölltest. VCL, FMX usw. nutzen selber oft die Generics ... da fallen deine paar Zeilen nicht mehr groß auf. |
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Kann man Generics auch auf Record-Typen anwendenen?
Ich kenne nur den altmodischen Weg einen Zeiger auf die Struktur zu legen.
Delphi-Quellcode:
type
PRec = ^TRec; TRec = packed record sTest: String; end; // .... var TestTest: TRec; begin TestTest := PRec(IrgendeinObjectDesTypsTRec)^; showmessage( TestTest.sTest ); |
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Zitat:
- auf Desktop spielt das i.d.R. keine Rolle, sollte man viel mit Templates machen - auf Mobile, da könnte es schon auf das ein oder andere Kilobyte ankommen. Ich benutze trotzdem auf Mobile einiges an Generics, aber eben etwas sparsamer und nicht so excessiv wie auf dem Desktop. Rollo |
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Generell ist es so, dass nicht benötigter Code aus Units auch nicht "eincompiliert" wird. Ich denke, das ist bei Generics ähnlich.
|
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Zitat:
Zitat:
Was sich glaube ich vor allem geändert hat ist, dass eine TList<TMeineKlasse> bei mehrfacher Deklaration z.B. in Form eines Typs einer Variablen nicht mehrfach als generischer Typ erstellt wurde. Allerdings hatte ich das damals nicht selber getestet, sondern nur gelesen, dass geschrieben wurde, dass das passiert. In Delphi 10.1 ist das auf jedem Fall nicht (mehr) so. |
AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?
Zitat:
Fakt ist aber, dass wenn du TList<TFoo> und TList<TBar> in deiner Anwendung benutzt, der Code aus TList<T> zweimal in deiner Anwendung vorhanden ist. Einmal für T = TFoo und einmal für T = TBar. Aus diesem Grund wurde mit XE7 (oder wars XE8) die System.Generics.Collections so drastisch überarbeitet, so dass viele Methoden direkt auf einen nicht generischen Aufruf geinlined werden - leider wurde hier nur das Problem für die generischen RTL Collection Klassen gelöst und nicht für Generics allgemein (das müsste der Compiler/Linker selbst erledigen - ![]() Sobald man selbst generische Typen schreibt, sollte man sorgfältig designen und so wenig Code wie möglich generisch machen und wenn möglich eine nicht generische Basisklasse unten drunter legen, so dass der am Ende duplizierte Code möglichst klein ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 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