LiveCharts WPF 实时数据慢。提高 LiveCharts 实时绘图性能

  • Post author:
  • Post category:其他


该库的实施相当糟糕。有一个付费版本宣传自己比免费版本性能更高。我还没有测试付费版本。免费版的图表控件非常慢,尤其是在处理庞大的数据集时。

显然,默认情况下默认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 版权协议,转载请附上原文出处链接和本声明。