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处理不了大数据(比如数据源慢慢增加至四五千个数据)?
上网查了一些资料,说为了提高ChartControl控件的性能,可以设定一些属性:
_chartControl.CacheToMemory = true;
_chartControl.RefreshDataOnRepaint = false;
_chartControl.RuntimeHitTesting = false;
可这些都用了,也没有用。。。 greenhand 发表于 2018-9-8 15:29
上网查了一些资料,说为了提高ChartControl控件的性能,可以设定一些属性:
_chartControl.Cac ...
大神啊,请现身吧。。。我都已经疯狂1周啦。。。 加载数据之前,使用_chartControl.BeginUpdate(), 线束之后使用_chartControl.EndUpdate()
页:
[1]