AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TDataSet Performanceprobleme

Ein Thema von smudo · begonnen am 16. Sep 2005 · letzter Beitrag vom 16. Sep 2005
Antwort Antwort
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#1

TDataSet Performanceprobleme

  Alt 16. Sep 2005, 13:26
Hallo ,

ich nutze ein TDataSet um Daten im Speicher zu verwalten.
Bei größeren Datenmengen kommt es aber zu Performanceproblemen.
Ein besonderer Engpass ist das Auslesen eines Feldes:

Delphi-Quellcode:
FCells.Locate('id',ARow,[]);
Result:=FCells.FieldByName(IntToHeader(ACol)).asString;
Der erste Schritt (Locate) dauert teilweise mehr als 16 ms.
Ich hab's auch schon mit LookUp oder First und MoveBy versucht,
das Zeitverhalten ändert sich aber nicht.

Wie könnte ich den Vorgang optimieren?


Danke im Voraus

René
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TDataSet Performanceprobleme

  Alt 16. Sep 2005, 13:42
Zitat von smudo:
Hallo ,

ich nutze ein TDataSet um Daten im Speicher zu verwalten.
Bei größeren Datenmengen kommt es aber zu Performanceproblemen.
Ein besonderer Engpass ist das Auslesen eines Feldes:

Delphi-Quellcode:
FCells.Locate('id',ARow,[]);
Result:=FCells.FieldByName(IntToHeader(ACol)).asString;
Der erste Schritt (Locate) dauert teilweise mehr als 16 ms.
Ich hab's auch schon mit LookUp oder First und MoveBy versucht,
das Zeitverhalten ändert sich aber nicht.

Wie könnte ich den Vorgang optimieren?

Danke im Voraus

René
Worauf basiert denn Dein DataSet? Als erste Möglichkeit wäre hier die Erstellung eines Index zu nennen. Wenn Du dann einen hast, stelle Locate auf Findkey um, das ist mindestens 10x schneller. Desweiteren solltest Du die Häufig verwendeten Felder als Objekte definieren und nicht mit FieldByname jedesmal danach suchen lassen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#3

Re: TDataSet Performanceprobleme

  Alt 16. Sep 2005, 14:07
Danke, das klingt schon mal vielversprechend.

Zitat von Union:
Worauf basiert denn Dein DataSet?
TCells ist eine von TDataSet abgeleitete Klasse ohne DB-Anbindung, zum tabellenartigen Lesen und Schreiben von Daten.

Zitat von Union:
Als erste Möglichkeit wäre hier die Erstellung eines Index zu nennen.
Die erste Spalte trägt den Namen ID und beinhaltet die Zeilennummer, ist quasi mein Index.
Aber du meintest das sicherlich anders. kannst du mir bitte auf die Sprünge helfen?
FindKey klingt sehr gut, muss ich mir gleich mal ansehen.

Zitat von Union:
Desweiteren solltest Du die Häufig verwendeten Felder als Objekte definieren...
Das geht nicht, da TCells eine allgemeine Struktur ist und beliebig groß sein kann. Es gibt also nur Spaltennummern als Header, keine festen Spalten.

Vielen Dank schonmal

René
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: TDataSet Performanceprobleme

  Alt 16. Sep 2005, 14:26
Ich wusste nicht, dass es sich nicht um eine DB-Anbindung handelt. Dann könntest Du einen Index nur ziemlich umständlich hinbekommen. Aber irgendwie musst Du doch TCells.Locate implementiert haben, vielleicht gibt es da Optimierungsmöglichkeiten?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#5

Re: TDataSet Performanceprobleme

  Alt 16. Sep 2005, 14:49
TDataSet kennt leider kein FindKey, aber TCustomClientDataSet, werd ich mir mal ansehen.

Zitat von Union:
Dann könntest Du einen Index nur ziemlich umständlich hinbekommen.
Wie umständlich wäre das denn?

Zitat von Union:
Aber irgendwie musst Du doch TCells.Locate implementiert haben.
Nö. Hab ich nicht. Ist eine Methode von TDataSet.

Trotzdem Dankeschön, werd mal weitergucken.
Und wenn jemandem noch was hilfreiches einfällt, wäre ich sehr dankbar.

René
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: TDataSet Performanceprobleme

  Alt 16. Sep 2005, 16:24
Zitat von smudo:
ich nutze ein TDataSet um Daten im Speicher zu verwalten.
Der erste Schritt (Locate) dauert teilweise mehr als 16 ms.
Also ein Memory-Dataset.
Wie genau heist die Klasse und wo (URL ?) kann man den Sourcecode downloaden ?
Andreas
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: TDataSet Performanceprobleme

  Alt 16. Sep 2005, 17:47
Hi smudo,
Versuche doch, das mit ADO zu machen. Als 'Connection' nimmst Du einfach irgeneinen Textprovider. Dann setzt Du locktype auf ltBatchOptimistic. Dann werden die Daten nach einem Post nicht gespeichert, sondern erst nach ApplyUpdates. Ergo solltest Du eine Art TMemoryDataset haben.

Mit den ADO-Komponenten kannst Du aber Indexe erstellen, oder zumindest nach einer Spalte sortieren: Damit ist dann das Locate schneller.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 05:44 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