![]() |
TChart AddXY() zu langsam bei 100.000 Werten
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich wollte hier einige Werte Graphisch darstellen, aber AddXY (oder TLineseries?) hat ganz schön an 100.000 Werten ganz schön zu kauen.Gibt es da andere Komponenten die Sache schneller darzustellen bzw. die Sache zu optimieren?
Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
var Counter : array[1..11] of Integer; y,x,z,i : Integer; MySeries : TLineseries; begin Chart1.UndoZoom; Chart1.FreeAllSeries; for y := 1 to 11 do Counter[y] := 0; MySeries:= TLineseries.Create( Self ); MySeries.ParentChart:= Chart1; for x := length(Form1.MyListe) - 1 downto 0 do begin z:=Form1.MyListe[x]; i:=length(Form1.MyListe)-x; for y := 1 to 11 do begin if z in Form1.werte[y] then begin Counter[y] := 0; end else begin Inc(Counter[y]); end; Begin with Chart1.SeriesList[ 0 ] do AddXY( i,Array_Max(Counter,0,10)); end; end; end; end; |
Re: TChart AddXY() zu langsam bei 100.000 Werten
Hallo Hallo_Thomas,
warum fasst Du die Werte nicht in Gruppen zusammen (z.B. immer Mittelwert von 10 Werten) ? 100000 Werte stellt TChart ja eh nicht dar. Oder teil die Darstellung in mehrere Pages auf !! |
Re: TChart AddXY() zu langsam bei 100.000 Werten
gibt es ein TChart.BeginUpdate() ? damit schaltest du das neuzeichnen bis zum nächsten TChart.EndUpdate() aus.
|
Re: TChart AddXY() zu langsam bei 100.000 Werten
@ConstantGardener
-Die Werte werden Durch Array_Max(Counter,0,10) zusammengefast :nerd:
Delphi-Quellcode:
-Die Aufteilung löst nicht das Problem eines schnelleren Berechnung des Graphen :roteyes:
function TForm2.Array_Max(const aJeton: array of Integer; aStart, aEnd: Integer):Integer;
Var i:Integer ; begin Result := 0; for i := aStart to aEnd do Result := MaxIntValue([Result,aJeton[i]]); end; @DGL-luke Coole Idee:
Delphi-Quellcode:
Bringt etwa eine 50% Verbesserung bei meinen Programm.Echt Coole Idee!!! :hello:
Chart1.SeriesList[0].Beginupdate;
Chart1.SeriesList[0].Endupdate; Danke! Fällt jemand noch eine Idee ein, der Procedure hier Beine zu machen? :coder2: |
Re: TChart AddXY() zu langsam bei 100.000 Werten
Du könntest es in einen Thread auslagern. Dadurch wird dann kontinuierlich gefüllt. Du könntest einmal neuzeichnen lassen (Invalidate() oder gleich Paint(), denke ich sollte da helfen), sobald du die erste "Seite" voll hast und dann die Kompo erst wieder voll aktivieren, wenn der Thread fertig ist.
Musst du eben sehen, wie threadsicher die Kompo von sich aus ist. Ach ja: Damit das Fenster nicht einfriert wenn dus nicht im Thread machst, kannst du zwischendrin (alle 1000 - 10000 Werte) mal ein Application.Processmessages() einfließen lassen. |
Re: TChart AddXY() zu langsam bei 100.000 Werten
Dankeschön, ich werd es mir das mal demnächst anschauen, was sich da machen lässt! :shock: :lol:
|
Re: TChart AddXY() zu langsam bei 100.000 Werten
Zitat:
|
Re: TChart AddXY() zu langsam bei 100.000 Werten
Wozu zum Geier willst Du 100.000 Punkte darstellen, was für ein Display (und vor allen Dingen, was für eine astronomische Auflösung) hast Du denn? :shock:
Mal ehrlich, nimm einfach jeden 500.ten Punkt und dann gibts keine Probleme mehr... |
Re: TChart AddXY() zu langsam bei 100.000 Werten
100.000 sind es diesmal nicht, aber es sind viele Reihen mit vielen Werten, so das insgesamt schon einiges zusammenkommt. Ist für ne Maschinendatenvisaulisierung auf nem Dual-Display-System, bei dem beide Monitore eine Auflösung von 1680 x 1050 haben. Gibt halt Kunden mit komischen Wünschen :roll:
Und auch bei weniger Werten, sagen wir mal 5.000 Punkte, fände ich ein BeginUpdate/EndUpdate gut, denn wen man Zeit sparen kann, sollte man das auch, meiner Meinung nach. |
Re: TChart AddXY() zu langsam bei 100.000 Werten
Das man das optimieren sollte, ist klar (FastLine ist eine Series, die schnell genug sein sollte), aber unsinnig viele Werte sollten es schon aus Prinzip nicht sein, eben weil man keinen Unsinn programmieren sollte.
Das Argument, sonst sähe man keine Peaks, kann auch nicht zählen, weil dann die Abtastrate zu klein ist... Aber wie gesagt, Kunden gibts... :roll: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 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-2025 by Thomas Breitkreuz