我正在构建一个WPF工具,用于可视化冷藏容器(冷却容器)的数据。非常简单的传感器数据图(温度,设置点,湿度)。
问题在于渲染性能。通过REST API加载数据的速度非常快。将这些值重新格式化为DateTimePoints (耗时1ms)后,它们将在绑定的SeriesCollection上设置为齿轮值。在设置了这些值之后,应用程序立即冻结了10秒,呈现出一个缓慢的图表,整个应用程序就不能再使用了。我做了所有的例子和演示,但我不能让LiveCharts以一种有用的方式执行,我不知道我在这里做错了什么
CartesianChart
3倍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>发布于 2017-10-19 22:46:54
通过做一些更改,我能够在大约1.5秒内绘制出每个系列中包含1000个数据点的图表
上为空
我的代码版本也使用了标准图表,而不是齿轮版本,因为我没有许可证,所以对你来说可能会更快。
发布于 2019-10-22 20:48:37
我也有这个问题,对我有效的是:
SeriesCollection[0].Values = chartvalues.AsGearedValues().WithQuality(Quality.High)
当然,质量是可选的。但即使有了200k的点数,我也不再有渲染问题了。在我的示例中,cahrt值是ChartValues<ObservablePoint>。只要我错过了asgearedvalue的东西,它就不能工作,尽管它显示它是齿轮集合,应该是好的。
发布于 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美元对于这样一个库来说也不算什么。
https://stackoverflow.com/questions/46813076
复制相似问题