AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi VST mit ca. 50.000 Datensätze verdammt langsam, warum???
Thema durchsuchen
Ansicht
Themen-Optionen

VST mit ca. 50.000 Datensätze verdammt langsam, warum???

Ein Thema von Piro · begonnen am 7. Dez 2009 · letzter Beitrag vom 8. Dez 2009
Antwort Antwort
Seite 2 von 3     12 3      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 20:58
Hallo,

Delphi-Quellcode:
procedure Tfrm_main.SQLDataToVST_SubnetDetails;
var
  i : Integer;
  SubnetDetailsData : TOSubnetDetailsData;
begin
  vst_network_subnetdetails.BeginUpdate;
  try
    vst_network_subnetdetails.Clear;

    ... und alles andere

   // Application.ProcessMessages; was soll das denn ????

  finally
    vst_network_subnetdetails.EndUpdate;
  end;
end;
Und lass vor allem das Application.ProcessMessages; weg.

Ausserdem wundert mich, warum du überall String-Vergleiche hast

Delphi-Quellcode:
procedure Tfrm_main.vst_network_subnetdetailsGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  SubnetDetailsData : TOSubnetDetailsData;
begin
  SubnetDetailsData := TOSubnetDetailsData(vst_network_subnetdetails.GetNodeData(Node)^);
  if vst_network_subnetdetails.Header.Columns[Column].Text = 'IP Address'    
     then CellText := SubnetDetailsData.ipaddress;
  if vst_network_subnetdetails.Header.Columns[Column].Text = 'Device'       
     then CellText := SubnetDetailsData.device;
end;
Du weisst schon, dass Column (als Integer beginnend mit 0) viel besser geeignet ist,
dann geht es sogar mit case ?

Wenn du schon Strings vergleichst, dann so

Delphi-Quellcode:
procedure Tfrm_main.vst_network_subnetdetailsGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  SubnetDetailsData : TOSubnetDetailsData;
begin
  SubnetDetailsData := TOSubnetDetailsData(vst_network_subnetdetails.GetNodeData(Node)^);
  if vst_network_subnetdetails.Header.Columns[Column].Text = 'IP Addressthen
  begin
    CellText := SubnetDetailsData.ipaddress;
     Exit;
  end;
  if vst_network_subnetdetails.Header.Columns[Column].Text = 'Devicethen
  begin
    CellText := SubnetDetailsData.device;
    Exit;
  end;
end;
Bringst zumindestens ein bisschen Speed-Up.


Heiko
Heiko
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#12

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 21:00
BeginUpdate verursacht das der Tree sich erstmal nicht neu zeichnet, nicht sortiert und nichts anderes zwischenzeitlich macht.

das app.processmessages würde ich übrigens auch weg lassen.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#13

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 21:01
ok, ich werde das morgen versuchen. Leider habe ich die Sachen nur auf Arbeit.

Vielen Dank für die guten Ideen. Ich werde es euch wissen lassen, ob es geholfen hat.

Sven
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#14

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 21:25
Achso...

Den String Vergleich mache ich deshalb weil die Splaten verschiebbar sind. Oder bleibt zur Laufzeit der ColumIndex gleich dem ColumIndex zur Entwurfszeit?
Wenn nicht, macht der String Vergleich schon Sinn, oder? Natürlich nur mit dem Break.
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#15

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 21:30
Ist es empfehlenswert immer mit BeginUpdate und EndUpdate zu arbeiten, wenn etwas am VST gemacht wird? Zum Beispiel beim OnGetText oder OnCompareNode?

Vielen Dank im voraus.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#16

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 21:33
nee, isses nicht.

Dieses ist nur nötig, wenn "viel" geändert werden soll, also bei Schreibzugriffen, wie dem Hinzufügen oder Löschen von Nodes.

Und OnGetText, sowie OnCompareNode führen nur Lesezugriffe aus.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#17

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 22:09
Zitat von daywalker299:
Ist es empfehlenswert immer mit BeginUpdate und EndUpdate zu arbeiten, wenn etwas am VST gemacht wird? Zum Beispiel beim OnGetText oder OnCompareNode?
Wenn Du Daten im Tree änderst, dann ist das sinnvoll es in begin...endupdate zu kapseln.

OnGetText wird ausgelöst, wenn der Text einer bestimmten Zelle o.ä. angezeigt werden soll, z.b. nach einem Scrollen von Zeilen. Zu dem Zeitpunkt wird aber an den Daten(Nodes) des Trees nichts mehr geändert. Ergo ist dafür keine solche Kapselung notwendig und wäre auch kontraproduktiv.

Gruß,
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#18

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 22:11
Danke.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#19

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 22:28
Zitat von daywalker299:
Achso...

Den String Vergleich mache ich deshalb weil die Splaten verschiebbar sind. Oder bleibt zur Laufzeit der ColumIndex gleich dem ColumIndex zur Entwurfszeit?
Wenn nicht, macht der String Vergleich schon Sinn, oder? Natürlich nur mit dem Break.
Nein, der ColumIndex bleibt der ColumIndex zur Entwurfszeit, auch wenn du zur Laufzeit die Spalten vertauschst.
.BeginUpdate und .EndUpdate empfiehlt sich nur, wenn du .RootNodeCount änderst (bzw über .AddChild Datensätze hinzufügst, was ich nicht empfehle)

Ich mache das immer so (mit einer Suchfunktion, ist immer ganz praktisch ):
Delphi-Quellcode:
type
  TMyTreeData = record
    Nr: Integer;
  end;
  PMyTreeData = ^TTreeData;

  ArrayOfInteger = array of Integer;

var
  Nutzdaten: array of TMeineSelbstDefiniertenNutzdaten;
  Ergebnis: ArrayOfInteger;

procedure foo;
begin
  Ergebnis := SucheInNutzdatenNachWort(Nutzdaten, Wort);

  VST.BeginUpdate;
  VST.Clear;
  VST.RootNodeCount := Length(Ergebnis);
  VST.EndUpdate;
end;

procedure Bla.OnVSTInitNode(...);
var
  Data: PMyTreeData;
begin
  Data := VST.GetNodeData(Node);
  Data^.Nr := Ergebnis[Node.Index];
end;

procedure Bla.OnVSTGetText(...);
var
  Data: PTreeData;
begin
  Data := VST.GetNodeData(Node);
  with Data^ do
    case ColumIndex of
      0: ColumText := Nutzdaten[Nr].Wert1;
      1: ColumText := Nutzdaten[Nr].Wert2;
      else ColumText := '';
    end;
end;
Du musst nur am Anfang deine Nutzdaten mit den Werten der Datenbank befüllen.
Wenn du willst kann ich dir auch noch eine schnelle Suchfunktion hier rein stellen.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#20

Re: VST mit ca. 50.000 Datensätze verdammt langsam, warum???

  Alt 7. Dez 2009, 22:41
Hallo,

neeee,
nur beim Füllen des Trees,
dort wird eh (nach EndUpdate) OnGetText aufgerufen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 12:55 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