Ich will eine MRU-Liste implementierren, das ist eine doppelt verkettete Liste. Ich dachte, ich mach das so;
Delphi-Quellcode:
Type
TFoobarObject = Class
Public
pPrev, pNext : TFooBarObject; // Zeiger auf Vorgänger / Nachfolger
...
End;
...
Var
lHead, lTail : TFooBarObject;
Procedure Irgendwas;
Begin
MyFooBar := TFooBar.Create;
// Diese vier Zeilen machen aus 10ms für 3000 x Irgendwas aufrufen 25000!!!!
{*} MyFooBar.pNext := lHead.pNext; // neues Objekt kommt an den Kopf der Liste
{*} lHead.pNext.pPrev := MyFooBar;
{*} lHead.pNext := MyFooBar;
{*} MyFooBar.pPrev := lHead;
// Egal, ob das jetzt so stimmt (stimmt aber, glaube ich)
End;
Kann mir bitte bitte jemand erklären, wieso die kleinen Zeilen {*} die Anwendung um den Faktor 10.000 verlangsamen? Ich habe sie auskommentiert: 3000 Aufrufe = 0 oder 16ms (also echt wenig).
Mit den vier blöden Zeilen sind es 25.000 ms.
Ick zu blöd?