LabVIEW性能和内存管理 5
本文介绍LabVIEW性能和内存管理的几个建议 5。
内存重新分配
在有条件地向数组添加值以及能否确定数组大小的上限的时候采用预分配数组。
使用While循环时,自动索引的效率不高,因为数组的结束大小是未知的。然而,While Loop自动索引通过大幅增加输出数组的大小,避免了每次迭代时都调整输出数组的大小。当循环完成执行时,输出数组的大小被调整到正确的大小。While循环自动索引的性能与For循环自动索引的性能几乎相同。
自动索引假设将在循环的每次迭代中向结果数组添加一个值。如果必须有条件地向数组添加值,但可以确定数组大小的上限,请考虑预分配数组并使用替换数组子集来填充数组。
填充数组值之后,可以将数组的大小调整到正确的大小。该数组只创建一次,“替换数组子集”可以将输入缓冲区重用为输出缓冲区。这段代码的性能与使用自动索引的循环的性能非常相似。如果使用这种技术,请确保替换值的数组足够大,能够容纳结果数据。替换数组子集不会为调整数组的大小。
上面的例子展示了这个过程。
使用上述技术可以避免内存重新分配。替换数组子集函数的操作效率很高,因为它替换预先分配的数组中的值。防止内存重新分配的最佳方法是确定数组中有多少个元素,然后分配足够的内存。
Conditional Indicators
• An indicatorinside a Case structure or For Loop
• Prevents LabVIEWfrom reusing data buffers
构建blockdiagram的方法可能会阻止LabVIEW重用数据缓冲区。在SubVI中使用条件指示符会阻止LabVIEW优化数据缓冲区的使用。条件指示符是Case结构或For循环中的指示符。在有条件执行的代码路径中放置指示符会中断通过系统的数据流,LabVIEW不会重用来自输入的数据缓冲区。相反,LabVIEW强制数据拷贝到指示器中。这样做的原因是,如果没有执行条件路径,为了直接更新指示器,LabVIEW必须将默认数据传递给指示器。
当在Case结构和For循环之外放置指示符时,LabVIEW直接修改循环或结构内的数据,并将数据传递给指示符,而不是创建数据副本。可以为备选用例创建常量,而不是在Case结构中放置指示符。
在VI分析器中,导航到框图»性能测试。在子图测试中启用有线终端以识别代码中的条件指示器。
In VI Analyzer,navigate to the Block Diagram»Performance tests. Enable the Wired Terminals inSubdiagrams test to identify conditional indicators in your code.
这在LabVIEW帮助的VI内存使用主题中有描述。
需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。