分享

LabVIEW基础-内存优化_labview移位寄存器数组释放内存

 看云舒云卷c 2023-07-12 发布于广东

写了个需要长时间运行的程序,没做内存优化,于是,程序内存、我、老大、客户都炸了。


一 查看内存使用情况

1 未运行的程序所占内存

文件-VI属性-内存使用
VI属性-内存使用

2 查看运行中的VI所用时间及内存使用情况

工具-性能分析-性能和内存
性能分析-性能内存信息

3 显示所分配缓冲区

工具-性能分析-显示缓冲区分配
一个黑点表示有一个缓冲区分配
性能分析-缓冲区分配

二 内存优化

1 如非必要,不要将VI属性设置为重入

VI执行属性做了这么个子VI
子VI主VI
主VI设置为非重入然后运行一下
结果是这样的
结果
设置为共享副本重入执行的时候
结果是这样的
结果2设置为预先分副本重入执行的时候
结果是这样的

结果3共享副本重入执行,当框图内多个相同子vi时,执行时系统会根据是否需要同时执行来创建独立的内存空间,如果任意时刻仅有一个vi在运行,则系统就只会创建一个独立的内存空间,若多个同时运行时,同时系统就会创建多个独立的内存空间。
设置为此模式时尽量不要有没初始化的东西。
预先分副本重入执行在框图内有多个相同子VI的时候,给每个子VI分配一个单独的内存空间。

2 使用“请求释放内存”函数

3 使用移位寄存器或元素同址操作结构

此程序先构造数组再对其中几个特定位置的值进行替换,每一步操作都新开一块缓存保存运算结果副本。

在这里插入图片描述
加了个移位寄存器之后,成功去掉了不必要的数据副本

在这里插入图片描述

4 尽量避免开启子VI前面板

非得开启的时候,如果子VI前面板上有数据量大的控件(表格、图表等等),在关闭的时候记得释放。
例如我这个,一个表格,从程序开启到运行结束,最后要显示的数据大概3M,然后它再生成个波形图,而这个子VI又同时运行22个,于是它就在查看数据的时候内存不足,挂了。
解决很简单,在退出查看的时候把数组和波形图置空,完活。
在这里插入图片描述

5 可以将复杂VI拆分成几个子VI

这个操作并不会增加额外的数据空间和代码,而且在子VI运行结束的时候,可以及时收回子VI数据空间。

6 避免内存泄漏

LabVIEW是可以自动管理内存的,适当的时候分配或回收资源。一般就反复打开某资源之后没关闭会出现内存泄漏。
就打开文件后,就算不连“关闭文件”这个函数程序也不报错,但是就是会内存泄漏

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多