我的程序运行时,如果显示器屏幕显示的是程序界面,CPU使用就达到85%以上,如果显示器屏幕显示的不是程序界面而是其他(如网页),CPU使用才30%左右,这是为什么?
而且程序运行时,如果用鼠标对控件进行操作(如拖动Slide),CPU使用100%,这又是为什么?
已解决! 转到解答。
Please add small loop delay i.e. 25ms/ 100ms/ 200ms to while-loops.
In fact, CPU usage shows difference even if loop delay is as small as i.e. 1ms.
设计一个低内存低CPU消耗的LabVIEW程序是件很费脑筋的事情~~
程序的原动力大概人为去划分一下有三种:
1)顺序
LabVIEW程序的数据流编程模型(Dataflow)指:程序沿着数据流线执行一直到数据流消失的点,而不会被其他数据流线打断;其二,所有数据流线可以认为同时运行,具备天生的多线程特性。
这个动力是LabVIEW本身携带的。简单,几乎不能叫软件设计。除了优化算法,CPU使用率,包括内存是无法降低的。
2)循环
For/While等,周而复始;所有的程序以此为动力,类似一种泵之类的东西。像fung老大说的,这种东西异常的耗CPU,需要添加延时,使这个泵降低到一个合理的“功率水平”。
3)事件
事件依然以循环为基本动力,不过此时的减速器却基于这样的一种想法而设计:只有需要的时候,有数据需要处理的时候,才让循环运行;除此之外,该循环为阻塞状态,甚至不会空转数秒。所以表现下来,似乎软件以事件/消息为动力,来一条数据动一下。
该方法可以极大的降低CPU消耗,可以去看看“用户事件/User Event”的相关文档,以实现实际编程。
4)故而
顺序结构下要优化算法,Tools菜单下有一些评估的工具,多看看;文档中也有很多注意点。小的程序使用循环即可,大的软件最好将主干架构设计成事件。
三者相互配合,将CPU降低到0%不是遥不可及的事情。
5)人力不可为——界面
非常讨厌LabVIEW的前面板,很多低效率的控件。所以,少用控件,减少不必要控件是最好的优化方法。尽量少用完成显示功能控件的方法、属性节点进行通讯,因为这里面一定会调用OnPaint()。LV09中,提供了数据引用,尝试一下,但是不要忘了在恰当的时间释放引用,否则会有内存泄漏的危险。
ian fung 写:Please add small loop delay i.e. 25ms/ 100ms/ 200ms to while-loops.
In fact, CPU usage shows difference even if loop delay is as small as i.e. 1ms.
我程序循环中当然有放延时,每个循环都延时了。