5

我正在构建一个 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);
    }

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>
4

4 回答 4

4

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

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

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

于 2017-10-19T14:46:54.300 回答
1

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

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

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

于 2019-10-22T12:48:36.943 回答
-1

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

然后我尝试了 Geared,即使有数千个点、悬停、启用工具提示和默认 PointGeometry,速度和性能也非常出色(只有 1% 的 CPU 使用率)。我保持禁用动画并将质量设置为低。Geared 如此快速、轻巧、漂亮且功能丰富,令人惊叹。只需 99 美元,它的成本几乎为零。尤其是与成本高出 10 倍的 SciChart 相比。我对 LiveCharts 和 Geared 的唯一担忧是缺乏积极的开发。两者的最后一次更新是在 2018 年,而 Beto 似乎刚刚消失了。Geared 太棒了,如果项目被放弃,那将是非常可悲的。再一次,这样一个图书馆的 99 美元不算什么。

于 2020-01-31T08:31:19.367 回答
-4

不幸的是,WPF 的开源图表没有很好的性能。如果您想获得更高的点数和实时更新,那么您可能需要考虑商业图表。

我想建议我自己的组件 SciChart 作为一个潜在的解决方案。是的,它是商业的,我会透露我是所有者,但是它可以通过为您提供卓越性能的框架(数百万点,毫秒更新),真正解决 WPF 图表缓慢的问题。它还具有 MVVM 支持并包含许多功能。

有时间请看一下,网址是https://www.scichart.com/wpf-chart-features

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

于 2019-03-07T10:01:52.023 回答