2017-10-18 1111 views
1

我正在构建一个WPF工具,用于可视化冷藏集装箱(散热容器)的数据。非常简单的传感器数据图(温度,设定值,湿度)。
问题在于渲染性能。数据通过REST API快速加载。将值重新格式化为DateTimePoints(需要1ms)后,它们将被设置为绑定的SeriesCollection上的齿轮值。紧接在设置值之后,应用程序冻结10秒钟,呈现图表,并且整个应用程序不再可用。 我工作过的所有示例和演示,但我不能让LiveCharts在一个可用的方式来执行,我不知道我在做什么错在这里LiveCharts WPF糟糕的渲染性能

的CartesianChart
3X GStepLineSeries用(在这种情况下)626倍的值每系列
XAxisFormatter DateTimePoint

我不知道我在做什么错。 1900 GearedValues值太多了吗? LiveCharts是否糟糕?

CartesianChart GStepLineSeries enter image description here

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

您是否尝试过配置您的应用程序?哪些方法消耗的CPU时间最多? – dymanoid

回答

1

我能够作出一些改变来获得图形与每个系列1000个数据点,约1.5秒绘制

  • 在图表上将“Hoverable”设置为false
  • 做点几何空上的所有系列

我的代码版本也采用了标准图表不是齿轮版本我没​​有为一个牌照,所以可能会更快为您服务。