AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Erzeugt Delphi größere/langsamere Projekte mit Generics?

Erzeugt Delphi größere/langsamere Projekte mit Generics?

Ein Thema von a.def · begonnen am 11. Jan 2017 · letzter Beitrag vom 12. Jan 2017
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von himitsu
himitsu
Online

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

AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?

  Alt 11. Jan 2017, 14:19
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#12

AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?

  Alt 11. Jan 2017, 14:29
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 );
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#13

AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?

  Alt 11. Jan 2017, 16:20
Zitat:
Bedeutet das, dass das nicht-verwenden von Generics trotzdem besser ist?
Ich würde es mal so sagen:
- 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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?

  Alt 12. Jan 2017, 01:29
Generell ist es so, dass nicht benötigter Code aus Units auch nicht "eincompiliert" wird. Ich denke, das ist bei Generics ähnlich.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.286 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?

  Alt 12. Jan 2017, 08:17
Zitat:
Allein das Fehlen der Casting Orgien macht vieles wett.
Ich caste nicht, sondern habe für jedes Objekt seine eigene Liste mit eigenem Get/Put/Index[].
Das habe ich per .inc als Template gelöst. Das war dann mit den echten generischen Listen kompatibel, so dass ich per ifdef von dem Template oder von den echten generischen Listentypen ableiten konnte (zur Abwärtskompatibilität mit alten Versionen).

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.
Bei einer einfachen TList kommen pro Verwendung nach meinen Beobachtungen grob ca. 20 KiB in der Releaseversion hinzu.

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#16

AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?

  Alt 12. Jan 2017, 14:23
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.
Das ist schon seit mindestens Delphi XE (wenn nicht sogar Delphi 2010) so. Einzig DCUs werden u.U recht groß, da dort jeder benutzte generische Typ einkompiliert wird. Beim Linken in die Binary werden die Duplikate dann aber entfernt.

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 - siehe dazu mein Blogartikel).

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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (12. Jan 2017 um 14:29 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:32 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