greenhand 发表于 2018-9-8 15:21:02

ChartControl处理不了大数据?

本帖最后由 greenhand 于 2018-9-8 15:22 编辑

各位大神好!
本人采用timer每100ms从传感器采集一次数据,然后展示在主界面的DevExpress的ChartControl上。刚开始还可以,但基本上400-500秒左右界面就卡死了,请各位大神来研究一下哈。。。
//一个跨线程更新UI的委托
public Action UpdateUiAction;
。。。
。。。
            if (UpdateUiAction == null)
            {
                UpdateUiAction = UpdateTimeMethod;
                UpdateUiAction += UpdateChartMethod;
            }

//更新UI的函数
      public void UpdateTimeMethod()
      {
            _textEdittime.Text = _time.ToString("f3");
      }

      public void UpdateChartMethod()
      {
            _chartcontrol.RefreshData(); //此处的RefreshData是ChartControl控件的自带成员函数
      }


//这是timer,非winform中的那个timer   
   private readonly System.Timers.Timer _datatimer = new System.Timers.Timer();

            _datatimer.Elapsed += GetRealTimeData;
            _datatimer.Interval = 100;
            _datatimer.AutoReset = true;
            _datatimer.Enabled = false;

//这是timer的定时动作,采集数据,并展示在主界面的ChartControl上
      private void GetRealTimeData(object sender, ElapsedEventArgs e)
      {
            if (Interlocked.Exchange(ref _intTimer, 1) == 0)
            {
                var p = new APoint
                {
                  Time = Math.Round((DateTime.Now - _timezero).TotalSeconds, 3),
                  YouGangWeiYi = Math.Round(_sdz300.CurrentData.Pos, 3),
                  Load = Math.Round(Math.Abs(_sdz300.CurrentData.Load), 3)
                };
                _listallpoint.Add(p);//_listallpoint是ChartControl的绑定数据源,是一个List<APoint>,每采集一次数据,就向_listallpoint添加一个元素
                _time = p.Time;
                BeginInvoke(UpdateUiAction);
                Interlocked.Exchange(ref _intTimer, 0);
            }
      }

这样的代码,定时器开始工作后,一开始很正常,很流畅,约四五百秒后(数据源Count数量到了四五千左右),界面会越来越卡。。。
自己试了一下,卡顿主要是由于UpdateUiAction += UpdateChartMethod;造成的——这句主要是更新ChartControl。。。
请问各位大神,是俺的代码有问题还是ChartControl处理不了大数据(比如数据源慢慢增加至四五千个数据)?

greenhand 发表于 2018-9-8 15:29:40

上网查了一些资料,说为了提高ChartControl控件的性能,可以设定一些属性:
            _chartControl.CacheToMemory = true;
            _chartControl.RefreshDataOnRepaint = false;
            _chartControl.RuntimeHitTesting = false;
可这些都用了,也没有用。。。

greenhand 发表于 2018-9-9 10:32:29

greenhand 发表于 2018-9-8 15:29
上网查了一些资料,说为了提高ChartControl控件的性能,可以设定一些属性:
            _chartControl.Cac ...

大神啊,请现身吧。。。我都已经疯狂1周啦。。。

tweenkin 发表于 2018-10-4 18:19:50

加载数据之前,使用_chartControl.BeginUpdate(), 线束之后使用_chartControl.EndUpdate()
页: [1]
查看完整版本: ChartControl处理不了大数据?