该库的实施相当糟糕。有一个付费版本宣传自己比免费版本性能更高。我还没有测试付费版本。免费版的图表控件非常慢,尤其是在处理庞大的数据集时。
显然,默认情况下默认CartesianChart.AnimationSpeed设置为 500ms。在实时场景中将绘图速率提高到 1/450 毫秒以上将导致“丢失”帧。“丢失”意味着数据最终可见,但不是实时绘制的。每个布局失效的渲染过程只需要太长时间。
超过 450 毫秒将使情节显得滞后(由于跳帧)。这是执行不力的结果。当超过 500 毫秒的默认动画速度时,应禁用动画。
无论如何,您可以采取一些措施来提高整体性能,从而显着超过 450 毫秒:
使用ObservablePoint或ObservableValue或一般让您的数据类型实现INotifyPropertyChanged。在修改固定/不可变数据项集而不是修改源集合(例如,通过添加/删除项)时,您可以获得更好的结果。
通过设置LineSeries.PointGeometry为删除图形的实际视觉点元素null。这将删除额外的渲染元素。线条笔划本身将保持可见。这将显着提高性能。
设置Chart.Hoverable为false禁用鼠标悬停效果。
设置Chart.DataTooltip为{x:Null}禁用工具提示对象的创建。
设置Chart.DisableAnimations为true。禁用动画将显着提高渲染性能。或者通过设置禁用每个轴的选择性动画Axis.DisableAnimations。
设置Axis.MinValue和Axis.MaxValue禁用每次值更改时的自动缩放。在 x 轴值发生变化的大多数情况下,您也必须实时调整这两个属性。
SetAxis.Unit还显着改善了重新渲染时的外观。
UIElement.CacheMode在图表对象上设置。使用 aBitmapCache允许禁用像素捕捉和修改渲染缩放。BitmapCache.RenderAtScale低于此值会1增加模糊度,但也会增加UIElement.
主窗口.xaml
<Window>
<Window.DataContext>
<DataModel />
</Window.DataContext>
<CartesianChart Height="500"
Zoom="None"
Hoverable="False"
DataTooltip="{x:Null}"
DisableAnimations="True">
<wpf:CartesianChart.Series>
<wpf:LineSeries PointGeometry="{x:Null}"
Title="Sine Graph"
Values="{Binding ChartValues}"
Configuration="{Binding DataMapper}"/>
</wpf:CartesianChart.Series>
<CartesianChart.CacheMode>
<BitmapCache EnableClearType="False"
RenderAtScale="1"
SnapsToDevicePixels="False" />
</CartesianChart.CacheMode>
<CartesianChart.AxisY>
<Axis Title="Sin(X)"
FontSize="14"
Unit="1"
MaxValue="1.1"
MinValue="-1.1"
DisableAnimations="True"
LabelFormatter="{Binding LabelFormatter}"
Foreground="PaleVioletRed" />
</CartesianChart.AxisY>
<CartesianChart.AxisX>
<Axis Title="X"
DisableAnimations="True"
FontSize="14"
Unit="1"
MaxValue="{Binding XMax}"
MinValue="{Binding XMin}"
Foreground="PaleVioletRed" />
</CartesianChart.AxisX>
</CartesianChart>
</Window>
版权声明:本文为BeanGo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。