![]() |
Langsamer Zugriff auf Items einer TObjectList
Hallo,
ich benutze eine TObjectList um eine Liste von Objekten zu speichern. Jetzt habe ich folgendes festgestellt: Je mehr Items in der List desto langsamer wird das ganze. Bei 1 Item sind es noch Ticks, bei 15 Items 140 Ticks :shock: Ich benutze folgenden Code, den ich als "schuldigen Isolieren" konnte.
Delphi-Quellcode:
Der Zugriff auf "Document[Index]" wird durch einen getter erledigt, der so aussieht:
procedure Changed(Sender: TObject);
var Index: Integer; begin if (Sender is TSynEdit) then Index := FOwner.FSynEdit.IndexOf(Sender) else Index := FOwner.FRichEdit.IndexOf(Sender); if @FOnChange <> nil then FOnChange(FDocuments.Document[Index]); // hier Geschwindigkeitseinbruch end;
Delphi-Quellcode:
Wobei FSynEdit, FRichEdit und FList eine TObjectList sind.
function TXGENDocumentList.GetItem(Index: Integer): TXGENDocument;
begin Result := TXGENDocument(FList.Items[Index]); end; Wie lässt sich dieser extreme Geschwindigkeitseinbruch erklären und wie kann ich ihn beheben? mfG mirage228 [/delphi] |
Re: Langsamer Zugriff auf Items einer TObjectList
Hi,
es gibt "Entwarnung!" Nach ausgiebiger Suche habe ich herausgefunden, dass der Übeltäter in einer Methode steckt die von einer Methode im "FOnChange" aufgerufen wurden. Dabei wurde bei jeder eingabe eine TreeView gelöscht, und je nach Anzahl der Dokumente ein Item mit dem Dokumentnamen eingefügt und bei mehreren Dokumenten hat das halt sehr lange gedauert. Meine Problemlösung sah dann so aus: - Es wurde geprüft, ob das TreeView überhaupt sichtbar bevor gezeichnet wird - Das ganze wurde in eine abgetrennte Prozedur ausgelagert die nun zusätzlich aufgerufen werden muss. (Sie steckte vorher in einer Prozedur die bei jedem Tastendruck in eine Edit ausgeführt wurde :-\ ) - Die Prozedur zum Zeichnen der TreeView Einträge wurde verbessert. Einträge werden nun nicht immer gelöscht, sondern, falls sie vorhanden sind, geupdated. mfG mirage228 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 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