我正在构建一个WPF工具,用于可视化冷藏集装箱(冷却容器)的数据。非常简单的传感器数据图(温度,设定值,湿度) 问题是渲染性能。 通过REST API快速加载数据。将值重新格式化为DateTimePoints(需要1ms)后,它们将在绑定的SeriesCollection上设置为齿轮值。设置值后,应用程序立即冻结10秒钟,立即呈现图表,整个应用程序不再可用。 我完成了所有的示例和演示,但我不能让LiveCharts以可用的方式执行,我不知道我在这里做错了什么
的CartesianChart
3x GStepLineSeries(在这种情况下)每系列626个值
XAxisFormatter DateTimePoint
我不知道我做错了什么。 1900年的GearedValues值太多了吗? LiveCharts是不是很糟糕?
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>
答案 0 :(得分:3)
通过进行一些更改,我能够在大约1.5秒内绘制图表,每个系列包含1,000个数据点
我的代码版本也使用标准图表而不是齿轮版本,因为我没有许可证,所以它可能更快。“
答案 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/上找到特定的性能演示