![]() |
AW: RTL Performance D7 vs XE7
Zitat:
|
AW: RTL Performance D7 vs XE7
Zitat:
|
AW: RTL Performance D7 vs XE7
Zitat:
|
AW: RTL Performance D7 vs XE7
@jbg
vielen Dank für deine interessanten Ausführungen. Deine beschriebenen Caseszenarien liegen glaub ich eher bei den meinen. Hinzu kommt noch das ich Lazy Loading nicht besonders mag und vermeide wenn ich die Möglichkeit habe. Es komm also häufiger Vor das ich beim initialisieren des Programms Objectlisten mit mehreren Tausend Objekten pro Typ vollballere. Und da kommt es dann doch schon auf solche "Kleinigkeiten" an. auch meine ich damals mal gehört zu haben das der Borland MM beim erweitern von Listen schneller sein sollte, weil er imm gleich 4 einträge allociert der FastMM immer einen einzigen. Trifft dies noch immer so zu? mfg newbe |
AW: RTL Performance D7 vs XE7
Zitat:
|
AW: RTL Performance D7 vs XE7
Zitat:
Zitat:
Und zum TList<TObject>. Wer überschreibt in Delphi denn TObject.Equals? Das führt nur zu seltsamen Effekten, da das es zu spät kam und jeder davon aus geht, dass ein List<TObject>.IndexOf(MyObject) den Index von MyObject liefert und nicht von einem Objekt, dass zufälligerweise die selben Daten hat. |
AW: RTL Performance D7 vs XE7
Zitat:
Wenn du das optimieren willst, dann musst du dir die IndexOf Methode überschreiben und dort mir einem case über den TypeKind die spezifischen Vergleiche laufen lassen (so werd ich diese Optimierung wohl auch in Spring4D einbauen, von daher an dieser Stelle danke, dass du mich auf dieses potenzielle Performanceproblem aufmerksam gemacht hast) Im Übrigen benutzen wir Equals overrides bei Datenklassen durchaus (meist läuft es auf ein Id Vergleich hinaus). |
AW: RTL Performance D7 vs XE7
@jbg
Der FastMM ist jetzt doch drinne in XE7 oder? @stevie Mir ginge es beim verwenden von generics um das weniger Code schreiben / mehr Lesbarkeit, jedoch bin ich nicht gewillt dafür derartige Performanceeinbußen hinzunehmen. Den Zugriff über irgendwelche Enumeratoren find ich auch schlecht gelöst. Wenn dann bitte so wie in C# also in der Art foreach var item in items item.machirgendwas; oder for (int i = 0; i < items.count();i++) bla = items[i]; bla.mache irgendwas; mfg newbe |
AW: RTL Performance D7 vs XE7
Zitat:
![]() Richtig, mit nem Enumerator. Worin unterscheidet sich das von:
Delphi-Quellcode:
Außer, dass eine for in Schleife in Delphi bei einem Array (im Gegensatz zu C#, wo auch ein array IEnumerable implementiert) nicht über einen expliziten Enumerator läuft sondern vom Compiler direkt übersetzt wird.
for item in items do
item.machirgendwas; |
AW: RTL Performance D7 vs XE7
@stevie
naja ich kanns nicht so schreiben??? Wenn ich deinen Post vorhin richtig verstanden habe muss ich auf das Item über irgendwelche comperator Interfaces drauf zugreifen? dat hier meinte ich bei IndexOf nicht "if FList[Index] = Value then" schreiben kann, sondern einen Comparer (Interface) bemühen muss "if Comparer.Equals(FList[Index], Value)", was ein indirekter Funktionsausruf ist, der dem Compiler auch noch die Möglichkeit nimmt, Daten in CPU Register zu bunkern, vor allem bei Win32. der Unterschied fällt dir auf? gerade geschachtelte Liste und Array Acessoren finde ich hässlich. mfg newbe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 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 by Thomas Breitkreuz