LiveCharts WPF 渲染性能差

Tim*_*son 5 wpf livecharts

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

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

我不知道我做错了什么。1900 GearedValues 值是否过多?LiveCharts 有那么糟糕吗?

CartesianChart GStepLineSeries 在此处输入图片说明

 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);
    }
Run Code Online (Sandbox Code Playgroud)

Xml:

     <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>
Run Code Online (Sandbox Code Playgroud)

Kev*_*oss 4

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

  • 在图表上将“Hoverable”设置为 false
  • 使所有系列上的点几何体为空

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