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


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

    显然,默认情况下默认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.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    主窗口.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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
  • 相关阅读:
    nginx代理gitee
    leetcode_2909元素和最小的山形三元组
    Python爬虫基础(四):使用更方便的requests库
    Ubuntu22.04中解决Wine通达信版行情软件侧边栏显示异常的问题
    Spring AOP框架
    Ubuntu 17.10的超震撼声音权限
    C++深度解析教程 - 目录
    csdn涨薪技术之UI⾃动化⼯具: UiAutomator2
    递归算法学习——黄金矿工,不同路径III
    公众号h5授权链接显示redirect_uri域名与后台配置不一致
  • 原文地址:https://blog.csdn.net/BeanGo/article/details/126278249