PointLineSeries PointsVisible performance issue with large d
Moderator: Queue Moderators
-
- Posts: 7
- Joined: Mon Apr 24, 2017 3:24 pm
PointLineSeries PointsVisible performance issue with large d
I have a chart with a single PointLineSeries, displayed with no Line, Points only. The X axis is a DateTime.
The series has approximately 250k data points, most of them defined as NaN due to an underlying data issue: the series effectively has 5 data points that are not NaN.
While I can fix the underlying data issue, I am concerned with the fact it takes about a minute for the chart to draw, and any manipulation on the chart causes the UI to freeze for 30 seconds or more.
During the data load, I am using Begin/End-Update, and I have validated that changing the PointsOptimization setting seems to do nothing at all in my case.
I loaded another series with about 120k points with only a few NaNs in there, and did not experience any performance issue.
Anything you could point that I am doing wrong? Obviously fixing the underlying issue will help, but I do not *always* want to get rid of those NaNs as they do have a meaning... The case at hand (5 valid point over a pile of 250k) is a corner case only, but other series are liable to have thousands of NaN data points that are perfectly legitimate.
This is running on LCU/Winforms v8.0.1.4001
The series has approximately 250k data points, most of them defined as NaN due to an underlying data issue: the series effectively has 5 data points that are not NaN.
While I can fix the underlying data issue, I am concerned with the fact it takes about a minute for the chart to draw, and any manipulation on the chart causes the UI to freeze for 30 seconds or more.
During the data load, I am using Begin/End-Update, and I have validated that changing the PointsOptimization setting seems to do nothing at all in my case.
I loaded another series with about 120k points with only a few NaNs in there, and did not experience any performance issue.
Anything you could point that I am doing wrong? Obviously fixing the underlying issue will help, but I do not *always* want to get rid of those NaNs as they do have a meaning... The case at hand (5 valid point over a pile of 250k) is a corner case only, but other series are liable to have thousands of NaN data points that are perfectly legitimate.
This is running on LCU/Winforms v8.0.1.4001
-
- Posts: 557
- Joined: Mon Mar 14, 2016 9:22 am
Re: PointLineSeries PointsVisible performance issue with lar
Hello,
It seems that you not using LightningChart's DataBreaking feature, but instead rely on GPU handling of NaN values. Please see User's Manual chapter 6.22 for the details how to enable DataBreaking .
Another way to exclude specific X range is Scale breaks (User's Manual chapter 6.22). It may be useful for you app as well.
In any case update to latest version (currently 8.1.2.1) as we constantly improve performance and fix bugs.
All the best.
It seems that you not using LightningChart's DataBreaking feature, but instead rely on GPU handling of NaN values. Please see User's Manual chapter 6.22 for the details how to enable DataBreaking .
Another way to exclude specific X range is Scale breaks (User's Manual chapter 6.22). It may be useful for you app as well.
In any case update to latest version (currently 8.1.2.1) as we constantly improve performance and fix bugs.
All the best.
-
- Posts: 557
- Joined: Mon Mar 14, 2016 9:22 am
Re: PointLineSeries PointsVisible performance issue with lar
In addition, with so many points it is beneficial (for speed) to disable mouse interaction:
Code: Select all
Series.MouseInteraction = false;
-
- Posts: 7
- Joined: Mon Apr 24, 2017 3:24 pm
Re: PointLineSeries PointsVisible performance issue with lar
Hi,
Thanks for getting back to me. I think I checked all the boxes you mentioned... Here is my code:
The addition I made that "saved" things is this for the Points definition:
As I was mentioning, without this filtering, performance is horrible...
Any thoughts?
Thanks for getting back to me. I think I checked all the boxes you mentioned... Here is my code:
Code: Select all
var mos = new PointLineSeries(_chart.ViewXY, xAxis, _chart.ViewXY.YAxes[(int) seriesProperties.Axis])
{
PointsVisible = true,
LineVisible = false,
Points = itemData.Where(x => !double.IsNaN(x.Value)).Select(x => new SeriesPoint(xAxis.DateTimeToAxisValue(x.Time), x.Value, x.AuditStampId)).ToArray(),
PointStyle = new PointShapeStyle
{
BorderWidth = seriesProperties.SeriesMarkerStyle.Hollow ? 1 : 0,
GradientFill = Arction.WinForms.Charting.GradientFillPoint.Solid,
Color1 = seriesProperties.SeriesMarkerStyle.Hollow ? Color.Transparent : seriesColor,
BorderColor = seriesColor,
Width = seriesProperties.SeriesMarkerStyle.Size,
Height = seriesProperties.SeriesMarkerStyle.Size,
Angle = seriesProperties.SeriesMarkerStyle.Angle,
Shape = seriesProperties.SeriesMarkerStyle.MarkerType.TranslateToLcu(),
},
Title = new SeriesTitle
{
Text = seriesProperties.Label
},
MouseInteraction = false,
DataBreaking =
{
Enabled = true,
Value = double.NaN
},
CursorTrackEnabled = false,
ShowInLegendBox = seriesProperties.ShowInLegend,
};
_chart.ViewXY.PointLineSeries.Add(mos);
Code: Select all
.Where(x => !double.IsNaN(x.Value))
Any thoughts?
-
- Posts: 557
- Joined: Mon Mar 14, 2016 9:22 am
Re: PointLineSeries PointsVisible performance issue with lar
Hi,
Could you send whole project or test project, which reproduce the issue to Arction's Support account?
Did you try to subscribe to _chart.ChartError event and check warning/notification in the event handler?
Could you send whole project or test project, which reproduce the issue to Arction's Support account?
Did you try to subscribe to _chart.ChartError event and check warning/notification in the event handler?
-
- Posts: 7
- Joined: Mon Apr 24, 2017 3:24 pm
Re: PointLineSeries PointsVisible performance issue with lar
Give me a few days to create a new, isolated project for this (the project is too large and depends o external resources, so I can't send it as is).
I looked at the ChartError event - only got the DPI awareness warning in there - which I fixed, of sorts - but no change in performance. No other errors or warning.
I looked at the ChartError event - only got the DPI awareness warning in there - which I fixed, of sorts - but no change in performance. No other errors or warning.
-
- Posts: 7
- Joined: Mon Apr 24, 2017 3:24 pm
Re: PointLineSeries PointsVisible performance issue with lar
Hi - I created a sample solution that shows the problem.
In the form, you have the option to show the line, markers and filter NaNs (before creating the series).
You will see that the problem happens as soon as you want to show Markers and do not filter the NaNs.
I hope this helps anbd thank you in advance!
In the form, you have the option to show the line, markers and filter NaNs (before creating the series).
You will see that the problem happens as soon as you want to show Markers and do not filter the NaNs.
I hope this helps anbd thank you in advance!
- Attachments
-
- LCUIssue.zip
- Sample solution reproducing the problem
- (12.94 KiB) Downloaded 801 times
-
- Posts: 557
- Joined: Mon Mar 14, 2016 9:22 am
Re: PointLineSeries PointsVisible performance issue with lar
Hi,
Thank you for the project. The 50'000 NaN value in between few reasonable is really extreme case. Yes, we see huge drop in performance. It is still not understood that makes this performance drop compare to few thousands NaN points. We will investigate further and let you know.
Probably the best workaround is disable PointsVisible and add SeriesEventMarkers instead. E.g.:
All the best.
Thank you for the project. The 50'000 NaN value in between few reasonable is really extreme case. Yes, we see huge drop in performance. It is still not understood that makes this performance drop compare to few thousands NaN points. We will investigate further and let you know.
Probably the best workaround is disable PointsVisible and add SeriesEventMarkers instead. E.g.:
Code: Select all
var arrWitoutNAN = itemData.Where(x => !double.IsNaN(x.Value)).Select(x => new SeriesPoint(xAxis.DateTimeToAxisValue(x.Time), x.Value, x.AuditStampId)).ToArray();
for (int i = 0; i < arrWitoutNAN.Length; i++)
{
SeriesEventMarker marker = new SeriesEventMarker(mos);
marker.XValue = arrWitoutNAN[i].X;
marker.YValue = arrWitoutNAN[i].Y;
marker.Symbol = new PointShapeStyle
{
BorderWidth = 0,
GradientFill = GradientFillPoint.Solid,
Color1 = Color.Black,
BorderColor = Color.Black,
Width = 5,
Height = 5,
Angle = 0,
Shape = Shape.Rectangle,
};
mos.SeriesEventMarkers.Add(marker);
}
-
- Posts: 7
- Joined: Mon Apr 24, 2017 3:24 pm
Re: PointLineSeries PointsVisible performance issue with lar
Thanks for your feedback - glad this could help you find an issue. In my specific case, my filtering "bypass" is adequate in that I'll allow the user to have EITHER the line OR the markers, so I can just filter those NaNs for cases when only markers are shown (and not for lines, where I do want to see the data breaks)
- ArctionPasi
- Posts: 1367
- Joined: Tue Mar 26, 2013 10:57 pm
- Location: Finland
- Contact:
Re: PointLineSeries PointsVisible performance issue with lar
We made a preliminary optimization / fix for this performance issue. We'll need to run more tests but it seems we can include it in the next assembly pack or installer
LightningChart Support Team, PT