首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LiveCharts WPF渲染性能较差

LiveCharts WPF渲染性能较差
EN

Stack Overflow用户
提问于 2017-10-18 22:49:35
回答 4查看 5.1K关注 0票数 5

我正在构建一个WPF工具,用于可视化冷藏容器(冷却容器)的数据。非常简单的传感器数据图(温度,设置点,湿度)。

问题在于渲染性能。通过REST API加载数据的速度非常快。将这些值重新格式化为DateTimePoints (耗时1ms)后,它们将在绑定的SeriesCollection上设置为齿轮值。在设置了这些值之后,应用程序立即冻结了10秒,呈现出一个缓慢的图表,整个应用程序就不能再使用了。我做了所有的例子和演示,但我不能让LiveCharts以一种有用的方式执行,我不知道我在这里做错了什么

CartesianChart

3倍GStepLineSeries,每个系列(在本例中)为626个值

XAxisFormatter DateTimePoint

我不知道我做错了什么。1900 GearedValues是不是值太多了?LiveCharts是不是很差劲?

代码语言:javascript
复制
 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:

代码语言:javascript
复制
     <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>
EN

回答 4

Stack Overflow用户

发布于 2017-10-19 22:46:54

通过做一些更改,我能够在大约1.5秒内绘制出每个系列中包含1000个数据点的图表

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

上为空

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

票数 4
EN

Stack Overflow用户

发布于 2019-10-22 20:48:37

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

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

当然,质量是可选的。但即使有了200k的点数,我也不再有渲染问题了。在我的示例中,cahrt值是ChartValues<ObservablePoint>。只要我错过了asgearedvalue的东西,它就不能工作,尽管它显示它是齿轮集合,应该是好的。

票数 1
EN

Stack Overflow用户

发布于 2020-01-31 16:31:19

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

然后我尝试了齿轮,即使有几千个点,悬停,工具提示启用和默认的PointGeometry,速度和性能都很好(只有1%的PointGeometry使用率)。我将动画设置为禁用,并将质量设置为低。齿轮是如此快速,轻量级,漂亮和功能丰富,它是令人惊叹的。只需99美元,它的成本几乎为零。特别是与SciChart相比,它的价格要高出10倍。我对LiveCharts和Geared唯一的担忧是缺乏积极的开发。两者最后一次更新都是在2018年,而Beto似乎就这么消失了。Geared是如此的奇妙,如果这个项目被放弃了,那将是非常可悲的。同样,99美元对于这样一个库来说也不算什么。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46813076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档