Forum: Object-Pascal / Delphi-Language
Delphi
by negaH,
14. Dez 2003
Choose hat das mit .NewInstance absolut richtig erklärt.
Ich würde strikt zischen .NewInstance als Allokator und .InitInstance als Inizialisator Funktion trennen. Ein kopieren eines Templates könnte nötigenfalls auch in .InitInstance = Constructor durchgeführt werden. In den meisten Fällen wird aber eine Node selber wieder dynamische Felder besitzen, also zB. LongStrings, Dyn. Arrays usw....
Forum: Object-Pascal / Delphi-Language
Delphi
by negaH,
6. Dez 2003
Ach eines noch. Der Performancegewinn wurde aber wahrscheinlich aus einem ganz anderen Grund erreicht. Angenommen man hat viele Speicherkopieroperationen von einer Node in die andere (bei mir sind es Large Integer). Dann ist es wichtig zu wissen wie und warum die internen CPU Caches arbeiten. Die Caches arbeiten immer dann optimial wenn 1. die Speicherbereich an 64 Byte Grenzen ausgereichtet sind...
Forum: Object-Pascal / Delphi-Language
Delphi
by negaH,
6. Dez 2003
Ja, aber aus ganz anderen Gründen. Ich benötigte einen Pool von gleichgroßen Records die aber per Reference Counting, sprich Interfaces, arbeiteten. Dadurch wurde mit Hilfe der integrierten Fähigkeiten des Delphi Compilers, ein automatisches Garbarge Collection und "Copy on Write Demand" realisiert. In diesem speziellen Fall wurden ALLE Operationen auf diesen "forged Interfaces" ca. 10%...
Forum: Object-Pascal / Delphi-Language
Delphi
by negaH,
6. Dez 2003
Werden in Klassen nur statische Methoden benutzt so gibt es in fakt keinerlei Performance Unterschiede zu normalen dynamischen Records. Ich empfehle dir also aus Sicht der Übersichtlichkeit Klassen zu benutzen.
Allerdings, werden sehr große Bäume benutzt, so gibt es andere Methoden sie um ein mehrfaches zu beschleunigen.
1. Methode sind Records die ohne Zeigeroperationen auskommen. Dabei wird...