AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Geschwindigkeitsunterschiede bei Objekten/Pointern?
Thema durchsuchen
Ansicht
Themen-Optionen

Geschwindigkeitsunterschiede bei Objekten/Pointern?

Ein Thema von Tiefflieger · begonnen am 5. Dez 2003 · letzter Beitrag vom 15. Dez 2003
 
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Geschwindigkeitsunterschiede bei Objekten/Pointern?

  Alt 7. Dez 2003, 11:50
Zitat von Hagen:
Zitat:
ob Du konkrete Erfahrungswerte für den Einsatz eines Nodemanagers für die Objekterstellung anbieten kannst:
Ja [...]. 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. [...] Somit sind die 10% viel mehr als von mir tatsächlich erwartet.
Das kommt dem, was ich zZt noch mit dem Borland Memory Manager (BMM) realisiere, ziemlich nahe: Lediglich mit dem Unterschied, dass meine "forgotten Interfaces" als gecachte Werte erst bei Bedarf als "freie Nodes" gekennzeichnet werden, weil sie in den meisten Fällen ohnehin kurze Zeit später erneut "erbaut" werden würden...

Zitat von Hagen:
Zitat:
Für welche Exemplargrößes lohnt sich der Einsatz?
Am einfachsten und effizientesten sind Records mit fester Größe. [...] Für variable Speichergrößen, würde ich beim Borland MM bleiben, denn dieser MM ist eigentlich schon enorm optimiert und einer der schnellsten überhaupt.
Diese Antwort deckt sich mit Deiner Äußerung zur Polymorphie. Danke.

Zitat von Hagen:
Zitat:
Wie groß ist der tatsächliche Zeitgewinn bei welchen Mengen von Exemplaren?
Dioes hängt hauptsächlich von der Größe und der Häüfigkeit der Records ab. [...] In meiner Library hatte ich ca. 2 Mio solcher De-/Alloziereungen pro Berechnung. Durch den Pool wurden die tatsächlichen Aufrufe zum Borland MM auf ca. 10.000 reduziert. [...] Da der Pool selber Threadbezogen arbeitet, [...] entfällt das Locking per RTL-CS.
Gerade das Veremeiden des Lockings klingt interessant...

Zitat von Hagen:
Zitat:
Was gewinnt man bei eine Initialisierung direkt in NewInstance?
Arbeitet man mit Klassen so bleibt einem garnichts anderes übrig als .NewInstance zu überschreiben.
Das ist mir schon klar, Hagen, ich meinte aber eher Vorbelegung von Exemplarvariablen, Referenzzählern direkt in NewInstance anstatt diese Belegung in InitInstance bzw. im Konstruktor vorzunehmen. Hier könnten neue Nodes mithilfe eines "Node-Templates" mit rep movsd relativ performant erzeugt werden...?

Zitat von Hagen:
Ach eines noch. Der Performancegewinn wurde aber wahrscheinlich aus einem ganz anderen Grund erreicht. [...] Da mein Pool als FIFO arbeitet rotieren sozusagen die allozierten Speicher im Pool. Dadurch passiert es das der Pool succesive Speicherbereich auch meistens succesive im Cache halten kann. [...] Eine Speicherkopieroperation zwischen zwei solcher unabhäniger Cachelines ist dann sehr viel scheller und verhindert Cachmisses der CPU. Eineinzigster solcher Cachemiss kann ca. 200 Taktzyklen beanspruchen.
Interessanter Aspekt.

Danke Hagen, für Deine ausführliche Darstellung!
gruß, choose
  Mit Zitat antworten Zitat
 


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 15:30 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