LiveCharts WPF渲染性能不佳

时间:2017-10-18 14:49:35

标签: wpf livecharts

我正在构建一个WPF工具,用于可视化冷藏集装箱(冷却容器)的数据。非常简单的传感器数据图(温度,设定值,湿度) 问题是渲染性能。 通过REST API快速加载数据。将值重新格式化为DateTimePoints(需要1ms)后,它们将在绑定的SeriesCollection上设置为齿轮值。设置值后,应用程序立即冻结10秒钟,立即呈现图表,整个应用程序不再可用。 我完成了所有的示例和演示,但我不能让LiveCharts以可用的方式执行,我不知道我在这里做错了什么

的CartesianChart
3x GStepLineSeries(在这种情况下)每系列626个值
XAxisFormatter DateTimePoint

我不知道我做错了什么。 1900年的GearedValues值太多了吗? LiveCharts是不是很糟糕?

CartesianChart GStepLineSeries enter image description here

 public GStepLineSeries SupplyTemperatures
    {
        get { return _supplyTemperatures ?? (_supplyTemperatures = new GStepLineSeries() { Title = "Supply" }); }
        set
        {
            _supplyTemperatures = value;
            RaisePropertyChanged();
        }
    }

    public GStepLineSeries ReturnTemperatures
    {
        get { return _returnTemperatures ?? (_returnTemperatures = new GStepLineSeries { Title = "Return" }); }
        set
        {
            _returnTemperatures = value;
            RaisePropertyChanged();
        }
    }

    public GStepLineSeries Setpoints
    {
        get
        {
            return _setpoints ?? (_setpoints = new GStepLineSeries
            {
                Title = "Setpoint",
                Fill = Brushes.Transparent,
                PointGeometry = null
            });
        }
        set
        {
            _setpoints = value;
            RaisePropertyChanged();
        }
    }

    public SeriesCollection ReeferDataTemperatureSeries
    {
        get
        {
            if (_reeferDataTemperatureSeries == null)
            {
                _reeferDataTemperatureSeries =
                    new SeriesCollection(GetSeriesConfig()) { SupplyTemperatures, ReturnTemperatures, Setpoints };

            }

            return _reeferDataTemperatureSeries;
        }
        set
        {
            _reeferDataTemperatureSeries = value;
            RaisePropertyChanged();
        }
    }

    private CartesianMapper<DateTimePoint> GetSeriesConfig()
    {
        return Mappers.Xy<DateTimePoint>()
            .X(rdcv => (double)rdcv.DateTime.Ticks)
            .Y(rdcv => rdcv.Value);
    }

的Xaml:

     <lvc:CartesianChart
                                Height="800"
                                DisableAnimations="True"
                                IsManipulationEnabled="False"
                                LegendLocation="Top"
                                Series="{Binding ReeferDataTemperatureSeries}">

                                <lvc:CartesianChart.AxisX>
                                    <lvc:Axis
                                        Title="Time"
                                        LabelFormatter="{Binding ReeferDataFormatter}"
                                        RangeChanged="Axis_OnRangeChanged"
                                        Separator="{x:Static lvc:DefaultAxes.CleanSeparator}" />
                                </lvc:CartesianChart.AxisX>
                                <lvc:CartesianChart.AxisY>
                                    <lvc:Axis Title="Temperature" />
                                </lvc:CartesianChart.AxisY>
                            </lvc:CartesianChart>

4 个答案:

答案 0 :(得分:3)

通过进行一些更改,我能够在大约1.5秒内绘制图表,每个系列包含1,000个数据点

  • Set&#34; Hoverable&#34;在图表上为假
  • 使所有系列
  • 上的点几何体为null

我的代码版本也使用标准图表而不是齿轮版本,因为我没有许可证,所以它可能更快。“

答案 1 :(得分:0)

我也遇到了这个问题,对我有用的是:

SeriesCollection[0].Values = chartvalues.AsGearedValues().WithQuality(Quality.High)

质量当然是可选的。但是即使有200k点,我也不再存在渲染问题。在我的示例中,cahrtvalues是ChartValues<ObservablePoint>。 只要我错过了asgearedvalues的东西,尽管显示它是齿轮式收藏并且应该没问题,但是它没有用。

答案 2 :(得分:-1)

免费的LiveCharts性能非常差。如果您想显示几十个数据点,也许几百个,那很好。如果要显示大量数据,则需要高性能,而Geared就是答案。我从免费版本开始,但是大约1000点后,UI停止更新,CPU使用率为40%,即使禁用了动画,悬停和工具提示也已关闭。唯一有帮助的是将PointGeometry设置为null。这解决了性能问题,但也删除了要点的圆圈,这是不可接受的。

然后我尝试了Geared,即使有成千上万的点,悬停,启用了工具提示和默认的PointGeometry,速度和性能也非常出色(CPU使用率仅为1%)。我保持禁用动画并将质量设置为低。 Geared如此快速,轻巧,美观且功能丰富,令人惊叹。仅售99美元,它的花费几乎没有。特别是与SciChart相比,后者的成本要高10倍。我对LiveCharts和Geared的唯一担忧是缺乏积极的开发。两者均于2018年更新,Beto似乎刚刚消失。 Geared真是太棒了,如果放弃该项目,这将是非常可悲的。同样,对于这样的库,99美元也不是什么。

答案 3 :(得分:-2)

不幸的是,WPF的开源图表性能不佳。如果要获得更高的点数和实时更新,则可能需要考虑商业图表。

我想提出我自己的组件SciChart作为潜在的解决方案。是的,它是商业性的,我将透露我是所有者,但是它确实可以通过为您提供出色的性能(数百万分,毫秒更新)框架来解决WPF图表缓慢的问题。它还具有MVVM支持,并具有许多功能。

如果有时间请看一下,URL为https://www.scichart.com/wpf-chart-features

可以在页面https://www.scichart.com/why-scichart-the-best-wpf-chart/上找到特定的性能演示