LabVIEW论坛
直播中

荣琪

8年用户 689经验值
擅长:可编程逻辑 测量仪表 嵌入式技术
私信 关注
[文章]

荣小菜补钙记第15期:类相关操作BUG分享

荣小菜补钙记第15期:类相关操作BUG分享
同步更新于 WeChat:荣小菜在补钙
大家好,我是荣小菜,也可以叫我Richie,今天分享两个刚刚遇到的关于类操作的BUG。
1.     背景
看过我“基于labview OOP仪表控制库”系列的肯定知道,我在代码中经常用到一个函数“获取LV类默认值”,使用该函数可以方便的根据输入的函数名(String)创建对应的类。然鹅,万万没想到该函数存在巨大“BUG”。。。。。。
按名称获取类函数.jpg

2.     BUG1介绍
有的电脑上,该函数在同一个Vi内调用时,无法并行使用。必须手动连线来分配运行次序。
而有的电脑上就无此问题。。。。。。
3.     BUG2介绍
这个BUG很难测试到,难以理解,也难以定位,但是机缘巧合,让我逮到了。
其现象就是当拖动面板时,该函数运行速度急剧下降。有的电脑上,该函数运行速度甚至会减慢好几百倍。相当于本来1ms就能运行完毕的,一旦用户长按鼠标拖动面板,就要500ms了,要是用户“没及时松手”,必然会造成数据堆积,程序错误等问题。用户:怪我咯~~~
如下图所示:正常情况下,15000次运行耗时1300ms左右(太慢了吧),而一但拖动面板移动,耗时就近乎翻倍,达到2300ms左右(慢到无法接受)。仅慢2倍,这说明我这台电脑还不错,在有些点电脑上,耗时可能翻几百倍T_T。
使用按名称获取类.gif 按名称获取类后面板.JPG
可见,其实主要有2个问题:一个是该Vi运行速度先天较慢,另一个是用户一拖动面板,该Vi运行速度会慢到龟速。
4.     解决方案
BUG1还好,真遇到了合理配置即可。
主要讲讲BUG2的解决方案,考虑到该Vi由密码锁定,暂时不知道其原理,我这里选择不使用该Vi。解决方案代码如下,我使用“获取LV类名”替换该函数,结合“簇至数组转换”,可以实现同样的功能。
替代方案后面板.JPG 产品簇.JPG

运行效果如下,同样15000次耗时仅50ms~70ms(耗时不同主要是由于类命不同造成For循环运行次数不同)。而当拖动面板时,耗时也无明显变化。
使用替代方案.gif
5.     总结
本期介绍了最近遇到的两个类操作相关的BUG,希望能帮小伙伴们避避坑。当然,BUG2的解决方法依旧存在一些缺陷,比如当产品簇中元素很多时,调用尾元素类的时间将远远大于调用首元素类的时间。此外,由于不知道用户会需要哪个类,会输入什么String,因此该方法的运行耗时是不确定的,在对耗时一致性要求较高场合下不适用(比如当需要根据耗时分配多核并行时,多核并行详见“荣小菜补钙记第2期”)。

回帖(4)

荣琪

2021-3-3 22:00:59
源代码忘记传了。。。。
赶紧给大家补上
1 举报

hr

2021-3-24 13:56:39
感谢分享
举报

程子

2021-6-27 10:34:50
不错,很厉害,很透彻!
举报

苗军胜

2021-8-8 10:02:29
不错不错,谢谢分享
举报

更多回帖

发帖
×
20
完善资料,
赚取积分