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

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

关于用LabVIEW开发wince应用程序时的内存释放问题

已解决!
转到解答

框图有几个并行while循环,作用分别是:采集电压、采集电流、控制采样时间、键盘功能实现、事件处理循环(响应前面板的键盘功能)、对采样的数据处理的循环、数据保存循环。各并行循环之间用队列来传递数据。
只有采集电压、采集电流、控制采样时间三个循环运行的时候程序内存占用上升一段时间后会停止上升,但是加了其它几个循环后内存占用就停不下来了。

此外,当数据保存内多增加一个保存内容时,数据处理循环会停止,而其它循环则能继续运行。

附上数据处理和数据保存循环程序。

0 项奖励
1 条消息(共 11 条)
3,773 次查看

你在定义队列时,规定了其中只能有一个数据.

所以数据处理循环会停止.

数据保存循环最慢, 永远也赶不上处理循环的.

1 (2).png

 

George Zou
0 项奖励
2 条消息(共 11 条)
3,739 次查看

感谢您的解答,目前这个循环暂停的问题已经解决(减少数据保存循环里的运算量并增大队列的容量);

但是程序内存占用不断上升的问题还是存在,能否再指教一下T.T

0 项奖励
3 条消息(共 11 条)
3,721 次查看

上次已经说了数据保存循环赶不上数据处理循环, 所以内存占用不断上升是必然的.

除非采样率够慢, 或者用 realtime OS.

优化只能延缓内存占用增长率.

 

George Zou
0 项奖励
4 条消息(共 11 条)
3,713 次查看

感谢您的解答,但是我不理解为什么数据保存循环跟不上数据处理循环会导致内存不断上升?它不能保存一次后就释放一次数据占用的内存吗?

 

而且我现在把给数据保存循环传数据的队列和数据保存循环用条件禁用框禁用起来,

前面板用tab control放各显示控件,页面停留在波形刷新页面并运行一日夜后内存稳定不变,

然后我要看另一页的数据内容时发现,一开始tab control各页面间每切换一次内存上升一点,连续切换十几次后内存又稳定不上升但是不会释放之前增长的,过了一个上午再次切换后内存又会上升一点,切换几次后内存又稳定不上升但仍不会释放之前增长的。

 

我不能理解这是程序的问题还是LabVIEW的问题又或者是wince操作系统的问题?

再次感谢您的解答!

0 项奖励
5 条消息(共 11 条)
3,701 次查看

但是我不理解为什么数据保存循环跟不上数据处理循环会导致内存不断上升?

 

数据在数据处理循环中被加入Q, 导致内存不断上升.

 

> 它不能保存一次后就释放一次数据占用的内存吗?

不会.  allocate/reallocate memory 较慢(与LabVIEW无关, Windows的故事), 所以一但allocate, 不会释放, 以备后用.

 

每个 Chart 有自己的 buffer.

 

你的程序没有妥善处理"退出".  通常在退出时, 调用 release queue 来释放内存.

 

 

George Zou
0 项奖励
6 条消息(共 11 条)
3,689 次查看

所以即使这里把"队列最大值"设为有限值,但是只要数据保存循环的速度不能变快,就会导致内存不断增长了,对吗?

 

这里没有调用“释放队列”是因为需要这个程序连续采集数据,不需要的时候直接关闭整个机器,于是把“释放队列”放在循环框外了。

 

感谢您的解答!!

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

所以即使这里把"队列最大值"设为有限值,但是只要数据保存循环的速度不能变快,就会导致内存不断增长了,对吗?

对, 除非你用 real time OS.

George Zou
0 项奖励
8 条消息(共 11 条)
3,670 次查看

所以即使这里把"队列最大值"设为有限值,但是只要数据保存循环的速度不能变快,就会导致内存不断增长了,对吗?

直到碰到上限.

 

George Zou
0 项奖励
9 条消息(共 11 条)
3,663 次查看
解答
已被主题作者 Nyamo 接受

加速数据保存循环:

 - 硬件:

    1. 用一个高配置的电脑;

    2. 用SSD硬盘;

    3. 增加 RAM.

 - 软件:

    1. 用 64 位的 OS, 和 64 位的 LabVIEW.

        32 位的 application (包括 LabVIEW) 只能用到此为 4G RAM.  LabVIEW 本身要用 2G (可减为1G). 

        你只有 2G 可用.   64 位的 LabVIEW 无此限制.

    2.  增高 LabVIEW 的 Priority, in Windows Task Manager.

 

George Zou
0 项奖励
10 条消息(共 11 条)
3,660 次查看