1.起因:最近要做一个数据采集显示控件,于是使用了表格控件来显示数据大小,可是后来发现运行一晚上后采集时间明显变慢,基本可以达到3S才刷新一次数据。
2.原因查找:通过对循环耗时查找发现时间集中在表格控件那块,使用禁用程序屏蔽表格控件后,发现时间就正常了。再次使用获取excel表格数据的方法将一个很大数据的二位数组给入表格控件(表格获取的数据实际就是一个二维数组)发现执行耗时2882ms,说明数据越大表格控件刷新耗时也会越来越大。
3.解决思路:虽然采集的数据越来越大,实际上我们前面板显示的数据其实是有限的,换句话说就算其实很多数据我们根本看不到,但是这些数据随着二维数据刷新后给入了表格控件,而表格控件接收到数据后肯定会刷新,这就导致耗时越来越高。我把表格控件大多数属性节点都试了一下(我以为属性节点可以有旧数据不会刷新的设置,后来想了一下是我想多了,表格控件只会接收二维数组,无法对其判断)。所以最终还是得从输入数据入手,既然很多看不见的数据刷新占用了大量的耗时,那么我们是不是就可以不显示这些数据呢,可是我又要看之前的数据怎么办呢,这是我之前一直不想对输入表格的二维数组数据动手的原因。后来想了想,那我们是不是可以想看哪就把输入的二维数组数据截取出来呢?
4.解决方法:表格控件的属性节点有一个名叫“索引”的属性节点,这个的作用就算显示前面板最左上角数据在表格的位置(运行一下,然后下拉或右移一下就明白了),他能知道表格当前的位置,所以就可以以它为起点对输入的二维数组数据执行截取,获取二维数组同样位置(地点)的范围数据,将其给入表格控件即可,这样刷新的数据会大大减少,具体看下图:
获取了起点的坐标后,通过“数组子集”来对输入的二维数组数据来进行截取,图中的35和20为我表格控件显示的行和列数据,具体可以根据需求设定,重点是35和20均会加上获取的起点坐标的行和列数据,这样下拉或者右移时会增大截取数组数据,就会显示下拉位置的数据,不至于一直显示固定前面板大小的范围,导致移动后显示数据为空白。
|