Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
145
Guidance for best performance.
posted

Hi Infragistics Support,

Can you provide some guidance/tips/suggestions for a new user of your controls?

I have a requirement to display ~400 series. Each with ~6000 points (for a total of ~2,400,000 points).   Will Infragistics WPF chart control be able to handle this and still provide a good user experience?

Some other requirements: will need zoom and pan, Series hit testing but not necessarily point (marker) hit testing.  I believe the data will normally be evenly spaced in the X direction but cannot guarantee that.

How would Infragistics recommend charting this data to achieve a good user experience (i.e. the char is still "snappy")?

Please let me know if any more information would help.  Thanks!

Chris

Parents
No Data
Reply
  • 30692
    Suggested Answer
    Offline posted

    Hey Chris,

    This one is an interesting challenge! XamDataChart is very much tuned toward rendering complex visuals (a single line with 2 million points, for example) with great performance, but when you start throwing in an extreme number of visuals then the underlying platform (WPF, in this case) starts to show some strain, or, in some cases, you start hitting some areas of the chart hard that haven't been tuned as aggressively as others.

    WPF really doesn't appreciate scenarios where there are many many visuals in the visual tree, which makes this sort of scenario a big challenge. However there are things you can do to arrange this scenario such that it performs well, I believe.

    First of all, though, you may want to reconsider the requirement? What story is being told by having that many series present at once? Are you trying to show the shape of many overlapping data sets? In which case, it may be more useful to coalesce the data into a single, or multiple min/max data sets and plot them as RangeAreaSeries, which can show a min/max range. You could even use this in a hybrid scenario whereby you switch to showing the individual series once the user has zoomed in to a sufficient level. I realize, however, that this may not fit your requirements perfectly.

    Here's some stuff you can do to tune the scenario where an extreme number of series are present:

    • Do not use the chart legend.
    • Turn markers off (series.MarkerType = None, this will greatly reduce the number of visual elements required)
    • Either turn things off that invade the chart's airspace (crosshair, tooltip) OR enable bitmap caching for the series (series.CacheMode = new BitmapCache())
    • Don't use immediate mode panning: chart.WindowResponse = WindowResponse.Deferred
    • Disable mouse wheel style zooming (preview wheel event on container and mark handled. Since the wheel zoom is always immediate on the roll, if there is enough frame delay then you can perceive a performance issue when rolling the mouse in and out. Meanwhile, this is less of a UX issue if you are using the drag rectangle to zoom in, and the Home key to return to default zoom.

    With the above advice combined, your scenario seems to perform pretty well for me. Here's a gist with the code I was using (minus, disabling the mouse wheel):

    https://gist.github.com/gmurray81/9a4fbcb71af824c51716

    Hope this helps! Let me know if you have any other questions.

    -Graham

Children