找回密码
 立即注册

QQ登录

只需一步,快速开始

roger.wang
社区贡献组   /  发表于:2013-11-6 11:49:00
11#
回复 8楼mingcedar的帖子

           

  1. LineAreaOptions.SetOptimizationRadius(c1chart, 20);
  2.             LineAreaOptions.SetOptimizationRadiusScope(c1chart, OptimizationRadiusScope.Lines);

  3.             c1chart.EndUpdate();
复制代码


在你demo基础上,我添加了2行代码,性能问题有所好转。
但不治本(如果按照类似策略添加超过200万数据呢?):
根源问题是C1Chart添加了150万数据点,而Chart如实的把这些点缓存到其内了,造成了数据量大,UI延迟响应的“问题”。

有两个解决方案可供您参考:
1 如果采集的数据是实时的,可以每5分钟添加新数据,把旧数据清空   (如,让Chart保存的数据不超过5万个)
2 如果采集的数据不是实时的,可以设置页面数据呈现300个采样点--每个line, 当滚动条滚动下一页后,再添加新数据、删除旧数据。

这2个解决办法均需要写逻辑代码来处理,依据具体的场景,且需要结合需求进行测试调整参数。
回复 使用道具 举报
mingcedar
高级会员   /  发表于:2013-11-6 13:58:00
12#
回复 11楼roger.wang的帖子

这两行代码的含义是什么,需要每个Line都加一遍吗?

数据不是实时的,如果分批加载,每次至少得加载一屏。一般的宽屏可能得1000个点以上。
按着滚动条滚动,不放开滚动条时,有什么事件可以通知Chart去更新数据吗?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-11-6 15:18:00
13#
回复 12楼mingcedar的帖子

1 这2行代码不用都添加一次,1个Chart添加一次就行。
  具体可参考C1官方帮助文档:http://helpcentral.componentone.com/nethelp/c1chartSL/

2 响应Axis轴的事件:
  ((INotifyPropertyChanged)(chart.View.AxisX)).PropertyChanged += LargeData_PropertyChanged;

判断当前轴的值(通过和当前一屏幕,如1000个点做比较)
double ss = chart.View.AxisX.Value;
                double dd = Math.Round(ss * (chart.View.AxisX.ActualMax - chart.View.AxisX.ActualMin), 0);
回复 使用道具 举报
mingcedar
高级会员   /  发表于:2013-11-7 20:26:00
14#
果然是高手,响应Axis轴的事件很好用。

用“LineAreaOptions.SetOptimizationRadius(c1chart, 20);",通过调整参数,确实能改善一些性能,但会使曲线失真,还不太满意。

再问一个,在Chart的Layers中放一个按钮,如何得到它的上、下、左、右分别投影到X和Y轴上的值?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-11-8 09:16:00
15#
回复 14楼mingcedar的帖子

高手的称呼不敢当,谢谢啊!

SetOptimizationRadius 的办法的确是你说的: 设置数据太大,则失真、不好看。 可以尝试设置小点,让业务人员看看,能否满足需求,同时兼顾开发上的性能。

Layers中弄个按钮,我写点代码试试。
你说的上、下、左、右,投影,啥意思啊?  不太懂,再给描述描述吧。
回复 使用道具 举报
mingcedar
高级会员   /  发表于:2013-11-8 17:48:00
16#
"上、下、左、右,投影"意思是,按钮的上边缘和下边缘,对应在Y轴上的刻度。左边缘和右边缘对应在X轴上的刻度。
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-11-8 18:04:00
17#
回复 16楼mingcedar的帖子

按钮的目前没有找到方法,我在你demo的基础上,参考官方文档:http://helpcentral.componentone. ... nteractionwith1.htm

添加了一个按钮和text, 移动鼠标可显示鼠标的x、y坐标(如果显示按钮的上、下、左、右; 能否通过一个固定的offset来实现呢? )




demo如下:(TestData20000.txt 文件太大了,上面的demo有)




你先参考参考,一块研究研究。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
mingcedar
高级会员   /  发表于:2013-11-8 18:06:00
18#
哈,还在线,辛苦
下载看看
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-11-8 18:10:00
19#
回复 18楼mingcedar的帖子

周末回家早,路上也是堵车啊。   
周末愉快, 先下了啊。
回复 使用道具 举报
mingcedar
高级会员   /  发表于:2013-11-8 18:31:00
20#
能取到鼠标值,但和想要的不一样。
我最终的需求是如附带图片,鼠标可以拖动8个黑框改变框的大小,及平移框的位置,同时在状态栏显示框在X轴和Y轴的坐标值。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部