AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Langsamer Zugriff auf Items einer TObjectList
Thema durchsuchen
Ansicht
Themen-Optionen

Langsamer Zugriff auf Items einer TObjectList

Ein Thema von mirage228 · begonnen am 7. Mai 2004 · letzter Beitrag vom 7. Mai 2004
Antwort Antwort
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#1

Langsamer Zugriff auf Items einer TObjectList

  Alt 7. Mai 2004, 15:17
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

Ich benutze folgenden Code, den ich als "schuldigen Isolieren" konnte.

Delphi-Quellcode:
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;
Der Zugriff auf "Document[Index]" wird durch einen getter erledigt, der so aussieht:
Delphi-Quellcode:
function TXGENDocumentList.GetItem(Index: Integer): TXGENDocument;
begin
  Result := TXGENDocument(FList.Items[Index]);
end;
Wobei FSynEdit, FRichEdit und FList eine TObjectList sind.

Wie lässt sich dieser extreme Geschwindigkeitseinbruch erklären und wie kann ich ihn beheben?

mfG
mirage228
[/delphi]
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Langsamer Zugriff auf Items einer TObjectList

  Alt 7. Mai 2004, 19:39
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz