AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam
Thema durchsuchen
Ansicht
Themen-Optionen

Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

Ein Thema von verkouter · begonnen am 30. Mär 2018 · letzter Beitrag vom 1. Apr 2018
Antwort Antwort
Seite 1 von 2  1 2      
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#1

Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 30. Mär 2018, 18:20
Hallo,
ich habe ein Stringgrid indem 2600 Bohrpunkte mit zugehörigen Koordinaten gespeichert sind und ich habe ein Listview in dem Dateinamen von Protokollen und als
1.Subitem der Bohrpunkt gespeichert ist.
Ich vergleiche jetzt per Schleife jede Stringgridreihe mit allen Listviewreihen, ob es einen Listvieweintrag mit gleichem Bohrpunkt gibt.Das sind also 2600 mal 2600
Vergleiche, das ist natürlich extrem langsam. Hat jemand eine andere Idee.

Delphi-Quellcode:
function FindListViewItem(lv: TListView; const S: string; column: Integer): TListItem;
var
i: Integer;
found: Boolean;
begin
Assert(Assigned(lv));
Assert((lv.viewstyle = vsReport) or (column = 0));
Assert(S <> '');
for i := 0 to lv.Items.Count - 1 do
begin
Result := lv.Items[i];
if column = 0 then
found := AnsiCompareText(Result.Caption, S) = 0
else if column > 0 then
found := AnsiCompareText(Result.SubItems[column - 1], S) = 0
else
found := False;
if found then
Exit;
end;
Result := nil;
end;

procedure TForm1.ToolButton23Click(Sender: TObject);
var
lvItem: TListItem;
begin
for I := stringgrid2.RowCount-1 downto 1 do
begin
lvItem := FindListViewItem(ListView1, stringgrid2.Cells[0,i], 1);
if lvItem <> nil then
begin
{mach was}
end;
end;
end;

Geändert von mkinzler (30. Mär 2018 um 18:57 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#2

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 30. Mär 2018, 18:37
Als erstes natürlich alle Daten in nicht sichtbaren Strukturen speichern. Hier bietet sich doch eine generische TList an, Records oder Klassenstrukturen.
Aber Daten in den visuellen Komponenten speichern ist eigentlich immer Pfui.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.429 Beiträge
 
Delphi 12 Athens
 
#3

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 31. Mär 2018, 06:45
Moin...
Zitat:
Aber Daten in den visuellen Komponenten speichern ist eigentlich immer Pfui.
+1
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 31. Mär 2018, 08:36
Falls es funktioniert, setze ein BeginUpdate in der FindListView() (oder sogar schon in der ToolButton23Click()) Funktion relativ weit oben und kurz vor Schluss ein EndUpdate. Das sollte theoretisch alles um 100% beschleunigen.
Aber Daten in den visuellen Komponenten speichern ist eigentlich immer Pfui.
Na wie bekommst Du denn Daten in ein Stringgrid ohne sie zu laden?

[Edit]
Was mir gerade noch so Einfällt um alles enorm zu beschleunigen, an der Stelle wo Du Dein Stringgrid mit Daten füllst, bastel eine kleine Unterfunktion ein die folgendes macht:
Bohrpunkte in Stringgrid-Column[XY] rein PLUS Bohrpunkte in ein Array, im Nachhinein nurnoch das Array nach Werten durchforsten. Eine TList geht auch, sollte die gleiche Performance bringen.
[/Edit]
Gruß vom KodeZwerg

Geändert von KodeZwerg (31. Mär 2018 um 08:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#5

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 31. Mär 2018, 10:12
Erst lesen, dann verstehen, dann erst posten (oder auch nicht), das ist der ideale Weg. Es ging nicht um die Darstellung und damit das Laden der Daten, sondern darum, wo sie vorgehalten werden. Und da sind visuelle Komponenten die schlechteste Alternative.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 31. Mär 2018, 11:52
Falls es funktioniert, setze ein BeginUpdate in der FindListView() (oder sogar schon in der ToolButton23Click()) Funktion relativ weit oben und kurz vor Schluss ein EndUpdate. Das sollte theoretisch alles um 100% beschleunigen.
Nein, tut es nicht. Nicht mal um 1%. Die obige Funktion liest den ListView aus, verändert ihn nicht. Der Aufruf von .BeginUpdate und .EndUpdate wirkt sich hier nicht aus.

@verkouter: Hast Du Einfluss auf die Reihenfolge Deiner Rohdaten? Angenommen, sie lägen sortiert vor, könntest Du Dir viele Vergleiche sparen, weil z.B. ab einem gewissen Punkt nur noch größere Elemente kommen können als das gesuchte. (Nur als Beispiel...)
Alternativ: Wie oft baust Du Grid und ListView auf und wie oft suchst Du? Man könnte beim Aufbau der Controls eine Art Lookup schaffen. Hier gäbe es beispielsweise das Dictionary, mit dem Du eine Abbildung von Bohrloch-Daten zu StringGrid-Zeilen machen könntest, sei es 1:1 oder 1:n.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 31. Mär 2018, 12:38
Darf ich mal etwas Fragen was glaube ich zum Thema passt und helfen würde es besser zu Verstehen .... (das hat nichts mit dem Thema "suchen/vergleichen" am Hut sondern Perfomance bzw Logik)

Also man hat eine Datei, möchte sich aus der Datei Daten in ein Stringgrid Anzeigen lassen, nun füll ich das Stringgrid mit Daten weil sie ja visuell Dargestellt werden sollen.
Wenn ich nun die Daten vorher in eine TList oder Array oder sonst was lade/puffer um sie dann trotzdem visuell darzustellen, in wie fern beschleunigt es die visuelle Komponente wenn die Daten aus einem TList o.ä. kommen anstelle direkt von der Datei?

Mit dem Begin/EndUpdate hatte ich angemerkt "Falls es funktioniert" weil ich mir nicht sicher war, danke für Klarstellung.

Der zweite Tipp von mir allerdings sollte definitiv funktionieren da ich es selbst so einsetze, wobei anzumerken ist das ich bei mir mein Array und die Visuelle Komponente so abgestimmt habe das beide immer den gleichen Index besitzen was mir beim suchen und anzeigen einen enormen Performance Vorteil einbringt. (suchen in einem Array mit 500.000 Einträgen = wenn es langsam ist (CPU/Core auslastung hoch) dauerts zwei bis drei Sekunden aber in der Regel ist ein Ergebniss unter einer Sekunde da)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 31. Mär 2018, 18:46
Als erstes natürlich alle Daten in nicht sichtbaren Strukturen speichern. Hier bietet sich doch eine generische TList an, Records oder Klassenstrukturen.
Aber Daten in den visuellen Komponenten speichern ist eigentlich immer Pfui.
Performance und visuelle Komponenten schließen sich gegenseitig aus. Man mag darüber diskutieren ob eine Tlist oder eine TStringlist hier besser ist, solange es keine visuelle Komponente ist, ist es auf jeden Fall schneller. Und es geht hier nicht um 10% sondern um 50..80%.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 31. Mär 2018, 19:08
Als erstes natürlich alle Daten in nicht sichtbaren Strukturen speichern. Hier bietet sich doch eine generische TList an, Records oder Klassenstrukturen.
Aber Daten in den visuellen Komponenten speichern ist eigentlich immer Pfui.
Performance und visuelle Komponenten schließen sich gegenseitig aus. Man mag darüber diskutieren ob eine Tlist oder eine TStringlist hier besser ist, solange es keine visuelle Komponente ist, ist es auf jeden Fall schneller. Und es geht hier nicht um 10% sondern um 50..80%.

Gruß
K-H
Ach lass ihn doch bei seinem glauben manche wissen es halt besser.

gruss
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#10

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 31. Mär 2018, 19:35
Zitat:
Ach lass ihn doch bei seinem glauben manche wissen es halt besser.
Muss man deinen Beitrag verstehen?

Was hab ich denn so schlimmes gesagt, worauf p80286 geantwortet hat? Ich sagte nur, man sollte seine Daten nicht direkt in visuellen Komponenten speichern.
Wer es trotzdem macht und das auch noch gut findet, sollte ernsthaft überlegen was er da tut.

Rumstänkern und Beiträge nur halb lesen ist jedenfalls keine Lösung.

Ließ dir meinen und p80286s Beitrag noch einmal ganz in Ruhe durch!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:35 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