Hello Infragistics team!
I created a test application based on your WPF DV Samples Feature Browser for XamDataChart. The sample is called "Binding Dynamic Data" I have 4 charts with 2 ScatterLineSeries on each of them. Each Series has 500 points. But updating these 4 Charts needs nearly 7-8 seconds! Maybe I developed something wrong? Is it possible to update 5-10 charts with 3-4 series on the each of them within 1 second? In our real application it is require to update many Charts in real time (it can be 10 Charts with 4 series on each of them with 300-500 points in each series). And this data are NOT Added one point by one. We load this Data from a database and we need to show it very fast. But what about your "Million Data Points, Milisecond Updates" (c) ??
If required, I can send you the source code of my test application.
Thanks a lot!
Hi,
Could you send along your sample code? I'll see if there are any recommendations I can make, or file a bug if there is something wrong with the control that has caused your scenario to be so unsatisfactory.
As general advice, I would use Line series over Scatter line series, unless you absolutely need it to be a scatter line series. The much more stringent constraints on Line series data allow for it to perform much, much better than the Scatter line. I'll see what other recommendations I can make based on your sample code, but my first recommendation would be to examine if you really need scatter line rather than line.
-Graham
I attach my source.
About ScatterLine and Line. We really need (X, Y) Series. With different intervals on X and on Y.
Thanks!
I believe whats going on here is related to the markers for the series. You were correct to turn them off for this sort of scenario as they are one of the most expensive aspects of the chart's rendering, especially at the initial filling of the chart with data, when many markers need to be added to the layout tree at once (they get reused and moved thereafter). The issue is, that while the category series will ignore all marker functionality when the markertype is set to none, it seems the scatter line series will still add markers with empty templates when you set the marker type to none. I'll submit this as a bug and get back to you with the bug number. You'll see that the update performance is less affected by the amount of markers than the initial load. If you grab the corner of the app and resize it isn't perfectly smooth, but it doesnt take another large chunk of time for each refresh.
What you have represents a worst case for the optimizations that the chart makes because you have many charts and many series. So many of the resolution dependent optimizations can reduce the geometry required for each individual series, but cannot help the fact that you have multiplied the number of series by 8. So the initial load of 500 markers into the layout tree is multiplied by 8, etc.
Going past the initial load performance to frequent updates. I think you'll find the performance is better in 11.1 as there have been many performance improvements introduced to the chart in this space. In 11.1 you also have a property you can engage called UseLightweightMarkers, that will turn off some of the more expensive aspects of the marker templates (DataContext, auto-centering), which should help with the high frequency updates, but not as much with the initial load due to the bug that the markers are still added to the layout tree when turned off, which I believe is the reason for the large delay on initial display from your sample. Will investigate.
Also, if you can elaborate further about why a category axis wont work with your data, we can make sure that that isn't an option for you. The scatter series have such a limited set of assumptions that they can make about the shape of the data that their performance will be lacking. It may be that we should define a new series type that meets with your requirements that don't align with the category model, yet can make more assumptions about the data shape than the scatter line can.
Hope this helps! I'll get back to you with a bug number, and hopefully we can improve this scenario for you soon!
Hi,First of all - Thank you for your detailed answer.
Some words about our real app. We have a big data collection, which is shown in charts. On one screen (Window) there can be 9 (as rule, but can be more than 9) charts. In each chart there are a maximum of 4 series (2 on the left and 2 on the right axis). These charts are updated in 2 modes: "Real mode" (when data is measured) and "Post mode" (when all data measured and we only need to load it from the database and show on charts).
In my sample app markers are really turned off. But in our real app we use 2 of our own chart types: "TimeChart" and "XYChart".
In "TimeChart" we have the current Time on the X-Axis. For these charts we use ScatterLineSeries (without any markers). In "XYChart" on the X-Axis there is one of the measured data. So, "XYChart" is a function Y(X). And there we use ScatterSeries. And on these series we use markers. Because we need not lines, but points in these "XYCharts". And for the markers we use some data template, because if I understand right, your markers have a fixed size. But they are too large for our charts.
But you say, that markers are most expensive aspects of the chart's rendering. What is the best solution for us?
I attach a sample which shows our usual screen (Window).
Why we use ScatterSeries instead CategorySeries? As I know CategorySeries use only ValueMemberPath. So, it uses only data for Y-Axis. And data on X-Axis is shown with fixed interval. But as I describe above, we use both: X and Y data for each point in Series.
So, if we are mistaken about CategorySeries - please, put us right .
Hello,
Here is the support ticket number: CAS-67943-BPWRZV we have created on your behalf. I am going to link it to development issue: 80441, that Graham created, so that you get automatically updated when a Feature Release containing the fix is available for download. You can get the new version from our website’s “My IG”, “My Keys & Downloads” tags: https://es.infragistics.com/Membership/Default.aspx?panel=Downloads#Downloads
You can also monitor the support ticket’s progress through the “My Support Activity” tag: https://es.infragistics.com/Membership/MySupport.aspx