Diagramme großer Datenmengen in Winforms

Die Dünne

Ich aktualisiere eine VB6-Anwendung auf .NET Windows Forms und suche nach einer Diagrammbibliothek, die eines von zwei Dingen tun kann:

  • Anzeige großer Datenmengen (1-2 Millionen Samples)
  • Zeigen Sie dynamisch aggregierte Stichproben der Daten an (z. B. ist die Aggregation eine Funktion des x-Achsen-Anzeigebereichs; je weniger von der gesamten x-Achse sichtbar ist, desto detaillierter sind die angezeigten Daten).

Das Detail

Diese Anwendung nimmt Daten von einem seriellen Gerät und speichert sie in einfachen CSV- oder anderen Formatdateien. Die Daten werden nicht in einer Datenbank gespeichert, sodass dynamische Datenfunktionen, die die Datenbank abfragen, nicht funktionieren werden (ich habe diese in Websteuerelementen gesehen, habe aber bei der Suche nach einer Winforms-Variante im Allgemeinen jede Erwähnung einer Datenbank außer Acht gelassen).

Der Kunde möchte gelegentlich in das Diagramm hineinzoomen, um feinkörnige Werte anzuzeigen. Dies kann mit dem Vanilla Windows Forms Chart-Steuerelement erfolgen, aber das Laden so vieler Daten ist zeitaufwändig (etwa 30 Sekunden auf meinem Entwicklungscomputer) und die Zoomfunktion reagiert ziemlich langsam. Ich habe versucht, die Aggregation über das Steuerelement zu untersuchen, aber es sieht so aus, als müsste ich mein eigenes Aggregationssystem codieren. Ich habe nicht wirklich die Zeit, das zu tun. Kennt jemand eine Diagrammbibliothek, die X/Y-Liniendiagramme mit großen Datenmengen erstellen kann und ziemlich reaktionsschnell bleibt?

Es wird also nur ein einfaches Liniendiagramm sein? Wie viele Zeilen wären es? Was hast du schon überlegt/getestet? Abhängig von Ihrer Infrastruktur scheint es eine Reihe von Optionen zu geben (z. B. können Sie JavaScript verwenden oder ein HTML-Steuerelement in die App einbetten?). Diese beiden SO-Fragen sind besonders relevant. (Tatsächlich ist dies wahrscheinlich eher eine SO-Frage als eine SR-Frage.)
Typischerweise gibt es drei Serien mit jeweils der gleichen Punktzahl (oft > 1 Million). Ich habe versucht, Diagrammbibliotheken einiger der größeren Steuerungsanbieter (ComponentOne, Infragistics, DevExpress, Telerik usw.) zu erstellen, und sie sind alle ziemlich träge oder erleben OutOfMemoryExceptions, wenn sie versuchen, die Daten anzuzeigen. Microsoft hat ein Diagrammsteuerelement bereitgestellt, das die Daten anzeigt (bei einer Million Punkten dauert die Anzeige etwa 10 bis 15 Sekunden. Ich teste gerade SciCharts und es sieht sehr vielversprechend aus. 1 Million Punkte in weniger als einer Sekunde und es hat Zoom und Schwenkfunktionen.
@Synetech Ich hatte bereits Fragen, die bei der Suche nach Bibliotheken abgelehnt und geschlossen wurden (insbesondere wenn sie wahrscheinlich kostenpflichtig sind). Ich habe auch gesehen, dass dieses Board auf Anfrage eines anderen Benutzers von SO referenziert wurde.

Antworten (5)

Sie können Ihr eigenes Diagrammsteuerelement erstellen. Das Grundprinzip ist die Verwendung der Steigungspunktform. Sie können meinen Code kostenlos verwenden: http://www.codeproject.com/Articles/14327/Drawing-medical-waveforms-using-a-Windows-Mobile

Ein paar Anregungen aus meiner Erfahrung.

  1. Laden Sie nicht alle Daten auf einmal. Erstellen Sie eine Art Benutzererfahrung, z. B. einen Schieberegler, um den nächsten Datensatz anzufordern.

  2. Verwenden Sie Fast Fourier Transform (FFT) https://en.wikipedia.org/wiki/Fast_Fourier_transform , da Sie Millionen von Werten verarbeiten müssen, für die Sie die Häufigkeit von Samples finden möchten (meinen Sie das mit Aggregation von Samples?).

Ich habe DevExpress XTraCharts . Obwohl ich persönlich noch nicht so viele Datenpunkte verwendet habe, wird es mit einer "großen Datenquelle"-Demoanwendung geliefert, die 1.000.000 Punkte verwendet, um zu demonstrieren, wie schnell es ist, und es ist schnell auf meinem alten Intel i5-Computer.

Große Dataset-Quelle

Es ist ein kommerzielles Produkt, das bei 900 $ beginnt und viel mehr enthält, als Sie brauchen. Kleinere Teile wie einzelne Bedienelemente kann man leider nicht kaufen.

Es benötigt keine SQL-Datenquelle, Sie können einfache .NET-Objekte verwenden und erfordert nur minimale Programmierung, wenn die Eigenschaften öffentlich sind.

Wenn Sie eine Min/Max-Aggregation durchführen möchten, wird dies ebenfalls unterstützt:

Screenshot von der Demo-Anwendung

MindFusion hat ein WinForms-Steuerelement , das kürzlich neu gestaltet wurde und die Leistung ist sehr gut. Es wird entweder als einzelnes Produkt oder in einer Packung verkauft.

LightningChart .NET ist der Leistungsführer bei WinForms-Diagrammen. Die Visualisierung von Millionen von Datenpunkten ist mühelos, Scroll- und Sweeping-Modi in Echtzeit sind integriert, und Daten werden sofort aus riesigen Datensätzen geladen, und ein Downsampling ist nicht erforderlich, die Daten werden in voller Qualität dargestellt. Das Diagramm kann im Extremfall über 10 Milliarden Datenpunkte visualisieren.

Da LightningChart ein echtes WinForms-Steuerelement ist, können Sie es im WinForms-Designer hinzufügen und die Eigenschaften mit einem Eigenschaftsraster festlegen.

Geben Sie hier die Bildbeschreibung ein

Dieses Diagramm verfügt über eine GPU-Beschleunigung mit DirectX 11- und DirectX 9-Engines, und ein Großteil der Datenverarbeitung wird auf die GPU ausgelagert.

An der Entwicklung des Charts bin ich seit über 10 Jahren beteiligt, die hohen Leistungsanforderungen kommen aus der Medizintechnik und Industrieautomation.

SciCharts war die Antwort. Ich konnte Millionen von Datenpunkten fast ohne erkennbare Verzögerung in eine Tabelle laden, und sie zoomt und schwenkt reibungslos. Die App, in die ich es eingefügt habe, ist eine Winforms-App, daher musste ich das Diagramm in einem WPF-Fenster hosten, das von Windows Forms aufgerufen und verwaltet wird. Abgesehen davon hat Sci Charts genau das Richtige für Sie.

SciChart ist kein WinForms-Steuerelement.
@PasiTuomainen Ich habe nicht erwähnt, dass ich die Anwendung letztendlich auf WPF portiert habe.
OK, wir entwickeln WinForms-Diagramme, WPF-Diagramme und UWP-Diagramme aus einem bestimmten Grund als separate APIs. Microsoft bietet Host-Steuerelemente an, aber alle haben ihre Nachteile. Die Verwendung eines WinForms-Diagramms in WinForms, eines WPF-Diagramms in WPF und eines UWP-Diagramms in UWP ist die beste Option.