下载后可任意编辑 LabVIEW 程序的内存优化 1 一. VI 在内存中的结构 打开一个 VI 的属性面板(VI Properties),其中的“内存使用”(Memory Usage)是用来查看这个 VI 内存占用情况的。它显示了一个 VI 内存占用所包含的四个主要部分:前面板、框图、代码和数据,以及这四个部分的总和。但在打开一个 VI 时,这四段内容并不是同时都会被 LabVIEW 调入内存的。 当我们打开一个主 VI 时,主 VI 连同它的所有子 VI 的代码和数据段都会被调入内存。由于主 VI 的前面板一般情况下是打开的,它的前面板也就同时被调入内存。但是此时主 VI 的框图和子 VI 的前面板、框图并没有被调入内存。只有当主动查看主 VI 的框图或是打开子 VI 的前面板和框图时,它们才会被调入。 基于 LabVIEW 的这种内存管理的特性,我们在编写 VI 的时候可以通过以下方法来优化 LabVIEW 程序的内存使用。 第一,把一个复杂 VI 分解为数个子 VI。子 VI 的使用会增添额外的前面板和框图的空间,但并不增添额外的代码和数据空间。由于程序运行时只有代码和数据被调入内存,因此使用子 VI 不会占用额外的内存。使用子 VI 的好处还在于当子 VI 运行结束时,LabVIEW 可以及时收回子 VI 的数据空间,从而改善了内存的使用效率。 第二,在没有必要时不要设置子 VI 的重入(Reentrant)属性。重入型 VI 每次运行时都会对自己使用的数据生成一个副本,这增加了内存开销。 第三,主 VI 的面板通常就是用户界面,需要显示给用户。但是要尽量避开开启子 VI 前面板。比如,在子 VI 中使用与其前面板控件有关的属性节点(Property Node)会导致它的前面板被调入内存中,增加了内存开销,所以要尽量避开在子 VI 中使用主面板控件的属性节点来设置控件的值,而可以用局部变量等方法来替代。 第四,我们可以放心地在 VI 的前面板(对于非界面 VI)和框图里添加图片,注释等信息来帮助你编写、维护 LabVIEW 程序,这些帮助信息不会在 VI 运行时占用内存。 二. 内存泄漏。 LabVIEW 与 C 语言不同,它没有任何分配或释放内存的语句,LabVIEW 可以自动管理内存,在适当的时候分配或收回内存资源[1]。这样就避开了 C 语言中常见的因为内存管理语句使用不当而引起的内存泄漏。 在 LabVIEW 中一般只有一种情况能够引起内存泄漏,即你打开了某些资源,却忘记了关闭它们。比如,在对文件操作时,我们需要先打开这个文件...