NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

CPU使用

已解决!
转到解答

我的程序运行时,如果显示器屏幕显示的是程序界面,CPU使用就达到85%以上,如果显示器屏幕显示的不是程序界面而是其他(如网页),CPU使用才30%左右,这是为什么?

 

而且程序运行时,如果用鼠标对控件进行操作(如拖动Slide),CPU使用100%,这又是为什么?

Thomas | Xi'an China

LabVIEW 7.1 | LabVIEW 2018
DAQmx | CompactRIO | myRIO
微信公众号: 钟博士LabVIEW工作室
0 项奖励
1 条消息(共 4 条)
5,124 次查看

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.

  

Ian F
Since LabVIEW 5.1... 7.1.1... 2009, 2010, 2014
依恩与LabVIEW
LVVILIB.blogspot.com
2 条消息(共 4 条)
5,112 次查看
解答
已被主题作者 ThomasYoung 接受

设计一个低内存低CPU消耗的LabVIEW程序是件很费脑筋的事情~~

 

程序的原动力大概人为去划分一下有三种:

 

1)顺序

LabVIEW程序的数据流编程模型(Dataflow)指:程序沿着数据流线执行一直到数据流消失的点,而不会被其他数据流线打断;其二,所有数据流线可以认为同时运行,具备天生的多线程特性。

这个动力是LabVIEW本身携带的。简单,几乎不能叫软件设计。除了优化算法,CPU使用率,包括内存是无法降低的。

 

2)循环

For/While等,周而复始;所有的程序以此为动力,类似一种泵之类的东西。像fung老大说的,这种东西异常的耗CPU,需要添加延时,使这个泵降低到一个合理的“功率水平”。

 

3)事件

事件依然以循环为基本动力,不过此时的减速器却基于这样的一种想法而设计:只有需要的时候,有数据需要处理的时候,才让循环运行;除此之外,该循环为阻塞状态,甚至不会空转数秒。所以表现下来,似乎软件以事件/消息为动力,来一条数据动一下。

该方法可以极大的降低CPU消耗,可以去看看“用户事件/User Event”的相关文档,以实现实际编程。

 

 4)故而

顺序结构下要优化算法,Tools菜单下有一些评估的工具,多看看;文档中也有很多注意点。小的程序使用循环即可,大的软件最好将主干架构设计成事件。

三者相互配合,将CPU降低到0%不是遥不可及的事情。

 

5)人力不可为——界面

非常讨厌LabVIEW的前面板,很多低效率的控件。所以,少用控件,减少不必要控件是最好的优化方法。尽量少用完成显示功能控件的方法、属性节点进行通讯,因为这里面一定会调用OnPaint()。LV09中,提供了数据引用,尝试一下,但是不要忘了在恰当的时间释放引用,否则会有内存泄漏的危险。

3 条消息(共 4 条)
5,103 次查看

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.

  


我程序循环中当然有放延时,每个循环都延时了。

Thomas | Xi'an China

LabVIEW 7.1 | LabVIEW 2018
DAQmx | CompactRIO | myRIO
微信公众号: 钟博士LabVIEW工作室
0 项奖励
4 条消息(共 4 条)
5,089 次查看