Frage

Ich habe einige einfache Diagramme (vom Typ Fastline) mit MSCHART erstellt und sie mit Live -Daten aktualisiert, wie unten:

MSCharts Level Chart

Dazu binde ich eine beobachtbare Sammlung eines benutzerdefinierten Typs an das Diagramm wie SO:

                // set chart data source
            this._Chart.DataSource = value; //is of type ObservableCollection<SpectrumLevels>

            //define x and y value members for each series
            this._Chart.Series[0].XValueMember = "Index";
            this._Chart.Series[1].XValueMember = "Index";
            this._Chart.Series[0].YValueMembers = "Channel0Level";
            this._Chart.Series[1].YValueMembers = "Channel1Level";

            // bind data to chart
            this._Chart.DataBind(); //lasts 1.5 seconds for 8000 points per series

Bei jeder Aktualisierung ändert sich der Datensatz komplett, es handelt sich nicht um ein Scroll -Update!

Mit einem Profiler habe ich festgestellt, dass das DataBind() Der Anruf dauert ungefähr 1,5 Sekunden. Die anderen Anrufe sind vernachlässigbar.

Wie kann ich das schneller machen?

  • Sollte ich einen anderen Typ verwenden als die Beobachtungspunkte? Ein Array wahrscheinlich?
  • Sollte ich eine andere Form der Datenbindung verwenden?
  • Gibt es einige Optimierungen für den MSchart, den ich möglicherweise verpasst habe?
  • Sollte ich einen sparsamen Datumssatz verwenden, der nur einen Wert pro Pixel hat?
  • Habe ich einfach die Leistungsgrenze von MScharts erreicht?

Von der Art der Anwendung, um sie "fließend" zu halten, sollten wir mehrere Aktualisierungen pro Sekunde haben.

Danke für irgendwelche Hinweise!

Bearbeiten: Lösung, wie von Leppie vorgeschlagen:

                this._Chart.Series[0].Points.Clear();
            foreach (var item in value) //iterates over the list of custom objects
            {
                    this._Chart.Series[0].Points.Add(new DataPoint
                    {
                        XValue = item.Index,
                        YValues = new double[] { item.Channel0Level.Value }
                    });

            }

Dies funktioniert jetzt mehr als doppelt so schnell!

War es hilfreich?

Lösung

Verwenden Sie die anderen Bindungsmethoden, sie sind sehr schnell.

Ich aktualisiere ungefähr 15 Serien über 3 Bereiche, 300 Punkte in jeder Serie, jede Sekunde und keine wirkliche Verlangsamung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top