提升LabVIEW程序性能-优化内存管理内容提要•为什么要优化LabVIEW程序内存管理•LabVIEW中监测VI内存占用和运行时间的工具•优化LabVIEW程序内存管理–基础篇–高级篇为什么要优化LabVIEW程序内存管理•LabVIEW的自动管理内存特性–方便用户开发,满足一般应用需求•LabVIEW应用程序趋向大型化,复杂化–项目规模大,需求复杂–数据处理量大,性能要求高•好的编程风格帮助LabVIEW优化内存管理–可以显著提高程序运行效率–需要了解LabVIEW的内存分配机制监测VI内存占用和运行时间的工具•帮助定位和分析程序中的瓶颈部分工具性能分析性能和内存显示VI内存分配情况的工具•帮助分析程序中各个数据变量的内存拷贝情况–目标:消除黑点工具性能分析显示缓存区分配演示:监测VI内存占用和运行时间的工具优化LabVIEW程序内存管理-基础篇•避免强制类型转换•防止内存泄漏•合理分配数组内存•合理使用全局变量1数据类型转换•强制点表明连接了两种不同的数据类型–LabVIEW中类型强制转换需要数据备份–涉及大数组的类型强制转换会占用大量内存推荐的类型转换方式•更好的解决方式是在随机数创建时进行转换–避免转换大块数据缓存(14.3KB)(22.7KB)2防止内存泄漏•通常发生在文件操作或动态调用VI中–注意关闭已打开的引用3合理分配数组内存•过多进行内存重新分配占用很大开销•慎用可能导致内存重新分配的相关函数–创建数组–连接字符串演示:LabVIEW数组分配4合理使用全局变量增加程序可读性–减少程序框图中的连线带来额外的内存开销–全局变量需要数据备份•避免对大数据变量使用全局变量–例如大数组,图像,信号等等•做到程序可读性和执行效率之间的平衡演示:全局变量的内存分配优化LabVIEW程序内存管理-高级篇•利用移位寄存器shiftregister•灵活使用LabVIEW自带的VI•使用元素同址操作结构InPlaceElementStructure•合理配置调用函数库节点CallLibraryNode1ShiftRegister-JeffKodosky的最佳创意之一!•通过使用移位寄存器,规定输出端数据重用输入端数据内存,节省内存开销•举例:将输入数组的前半部分增大10倍演示:移位寄存器的使用查找并替换数组中的值2灵活使用LabVIEW自带的VI•基本线性代数子程序VI(BasicLinearAlgebraSubroutines)–合理归并基本线性代数操作–减少不必要的内存复制开销–使程序更加简洁数学线性代数BLAS演示:使用BLASVI进行矩阵-向量乘法yxAT233元素同址操作结构•更新数组或簇中的元素时,避免元素数据备份应用控制内存控制元素同址操作结构的优点•方便实现多种情况的缓存重用,消除元素复制开销–数组索引和替换–簇的绑定和解除绑定–波形的绑定和解除绑定–变体的缓存重用–任意元素的缓存重用举例:数组索引和替换•将数组第2个元素增大10倍方法一:方法二:元素数据备份举例:簇的绑定和解除绑定•个人纳税信息的更新演示:嵌套的元素同址操作结构更新数组中单数号元素4合理配置调用函数库节点•调用库函数节点中的Constant选项–只有输入端,没有输出端,并确保在所调用的函数中没有修改所输入的数据–此时选中Constant选项,LabVIEW不会对输入数据进行备份演示:配置调用库函数节点总结•优化LabVIEW程序内存管理可以显著提高效率•利用内存分配显示工具检查内存分配情况•慎用可能导致内存分配的函数和全局变量•灵活使用缓存重用技术–移位寄存器shiftregister–元素同址操作结构目标:尽量消除代表内存分配的黑点!!