Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TChart AddXY() zu langsam bei 100.000 Werten (https://www.delphipraxis.net/65071-tchart-addxy-zu-langsam-bei-100-000-werten.html)

Hallo_Thomas 11. Mär 2006 21:07


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;

ConstantGardener 11. Mär 2006 21:58

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 !!

DGL-luke 11. Mär 2006 22:07

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.

Hallo_Thomas 11. Mär 2006 23:43

Re: TChart AddXY() zu langsam bei 100.000 Werten
 
@ConstantGardener

-Die Werte werden Durch Array_Max(Counter,0,10) zusammengefast :nerd:

Delphi-Quellcode:
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;
-Die Aufteilung löst nicht das Problem eines schnelleren Berechnung des Graphen :roteyes:

@DGL-luke
Coole Idee:
Delphi-Quellcode:
  Chart1.SeriesList[0].Beginupdate;
  Chart1.SeriesList[0].Endupdate;
Bringt etwa eine 50% Verbesserung bei meinen Programm.Echt Coole Idee!!! :hello:

Danke!

Fällt jemand noch eine Idee ein, der Procedure hier Beine zu machen? :coder2:

DGL-luke 12. Mär 2006 10:09

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.

Hallo_Thomas 12. Mär 2006 12:03

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:

Thanatos81 30. Nov 2006 15:16

Re: TChart AddXY() zu langsam bei 100.000 Werten
 
Zitat:

Zitat von Hallo_Thomas
@DGL-luke
Coole Idee:
Delphi-Quellcode:
  Chart1.SeriesList[0].Beginupdate;
  Chart1.SeriesList[0].Endupdate;
Bringt etwa eine 50% Verbesserung bei meinen Programm.Echt Coole Idee!!! :hello:

Danke!

Hmm, ich suche auch gerade etwas in der Art. Aber weder D/ noch D2006 kennen SeriesList[i].BeginUpdate :wall: Irgendwer ne AHnung, woran das Liegen könnte? Gibt es das nur in der kostenpflichtigen Pro-Version oder etwas in der ARt?

alzaimar 30. Nov 2006 15:41

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...

Thanatos81 30. Nov 2006 17:16

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.

alzaimar 30. Nov 2006 17:20

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