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

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

内存优化

看了很多帖子,很多都看不懂,不觉有些汗颜,都有点不好意思发这个求助了。但是实在是没有办法了,另外感觉总是要渡过小白这么一个阶段,所以还是厚着脸皮发这么一个求助,还请各位大神帮忙看一下。

首先说明一下我的意图,做的是IC测试,测试项目有D_VIN,D_FB,D_EN,FB,FOSC,前面几个是模拟电压,后面一个是频率,另外IS和IQ暂时屏蔽。主要是要做一个测试程序,配合机械手来对IC进行测试。主要的工作原理是,机械手准备好之后,发出一个SOT信号,程序在读到这个之后开始测试,测试完毕之后判断PASS还是FAIL,并给出合适的BIN信号,机械手根据这个信号把IC放入不同的料管。数字写入,数字读取,频率测量用的是PCI6601,模拟读取用的是PCI6014。

完全没有任何概念的情况下写了一个程序“11.vi”,结果跑了不到两分钟,速度明显变慢。

觉得基本上是因为创建任务和清除任务太多了,到吃内存占用太多,所以速度变慢。基于这个,把数据采集任务做成一个个大子程序,这样一来程序在需要运行它的时候才会去给它分配内存,运行完之后又会释放内存。试跑了一下,效果似乎很显著,看了windows任务管理器,原来内存会一直飙升的,现在基本也会保持一个数字不变了,可是在保持速度运行了二十分钟左右之后,完全乱套了,速度突然一下变得特别特别慢。之后有想过这么一个思路,反正基本上每个分支下面都需要数字写入的,就把创建任务和开始任务放在了循环外面,可是这样一来新的问题又来了,在SOT分支下,我需要做一个数字读取的动作,这里需要一个循环,只有侦测到有效的SOT信号时才会跳出这个循环开始测试,否则一直等待。而数字读取和写入用的都是PCI6601,把数字写入的创建通道和开始任务放在循环外面的话,势必会和这个分支有冲突,但是还是把这个写了出来,22.vi跑了一下,还是有问题。后来想了一下,这个从理论上似乎就有点不可行吧,

各位前辈帮忙看一下,给出一点建议或者思路,不胜感激。

下载全部
0 项奖励
1 条消息(共 7 条)
6,897 次查看

不需要用 Start Task / Stop Task,除非需要持续读写。

 

George Zou
0 项奖励
2 条消息(共 7 条)
6,888 次查看

我也有类似的问题耶,程序开起来以后,电脑会变得非常不流畅,我也用了start task 和stop task。请问:这两个东西很耗内存吗?如果不用的话该改成什么样子呢?

0 项奖励
3 条消息(共 7 条)
6,872 次查看

感谢关注,我其实也没有用开始任务,这里只是做一个演示的。TKS!

0 项奖励
4 条消息(共 7 条)
6,868 次查看

如果多次创建和清除任务的话,就会影响速度。所以一般只会把读取和写入放在循环里面。

0 项奖励
5 条消息(共 7 条)
6,867 次查看

太复杂,没仔细看。

 

最外面的循环没有延时,导致CPU一直在处理事件。

 

 

0 项奖励
6 条消息(共 7 条)
6,776 次查看

看了5分钟, 几个问题。

1. 用shift regiester 保存下创建的任务比较好。 用OBJECT也行。

2. 不用每次都reset设备的。

3. 最好用producer/consumer 架构。

 

0 项奖励
7 条消息(共 7 条)
6,671 次查看