LabVIEW性能和内存管理 7 LabVIEW中局部和全局变量的内存分配

简介: LabVIEW性能和内存管理 7 LabVIEW中局部和全局变量的内存分配

LabVIEW性能和内存管理 7 LabVIEW中局部和全局变量的内存分配


本文介绍LabVIEW性能和内存管理的几个建议7。


LabVIEW Cleanup


–    LabVIEW cleans upmany references when the owning VI goes idle and others when the process closes


–    Manually closereferences to avoid undesirable memory growth, particularly for long-runningapplications.


当打开引用的层次结构顶层VI(拥有的VI)空闲时,或者当LabVIEW退出时,LabVIEW会自动关闭引用。当拥有的VI处于空闲状态时关闭的一些引用类型是文件引用、队列和ActiveX引用。其他引用,如VISA和IVI,直到LabVIEW退出才会关闭。


作为程序员,在执行期间关闭引用仍然是一个好主意,原因有几个。如果有一个长时间运行的程序,重复打开引用而不关闭它们可能会导致内存问题,因为每个引用都需要内存。此外,任何与外部代码相关的引用都应该手动关闭,以确保关闭进程以特定的顺序执行,以避免崩溃和其他可能的损坏。在大多数其他开发环境中,关闭引用失败通常会在关闭应用程序时导致崩溃或内存泄漏。


Memory Usage ofthe User Interface


–    Every control onthe UI requires memory in order to store the data structure


–    At run time,Control and Indicator data is additional copy of block diagram data


–    Default data forcontrols may contribute to unnecessary memory usage


–    SubVI UIsgenerally do not contribute to memory usage


在LabVIEW中最容易被忽视的内存使用区域之一是前面板。当加载前面板时,LabVIEW必须分配足够的内存来存储所有的数据结构和默认数据。每个控件都包含框图上数据的单独副本,因此内存密集型应用程序应避免显示大量数据,除非需要,否则应避免耗尽内存。


如果有一个非常大的前面板和非常大的控件,例如一个包含30000个元素的数组,那么前面板需要更多的内存来加载。较大的默认数据可能导致内存使用量增加和加载时间变慢。使用VI Analyzer工具包中的Array Default Values测试来识别默认数据不必要地增加内存使用的情况。避免为顶级VI创建一个单一的、单片的前面板。结合一些特性,如子面板控件和动态加载的VIs,如果使用得当,可以减少应用程序的内存使用量。


SubVI通常不会将它们的前面板加载到内存中,除非需要或手动加载,所以SubVI的前面板的内存使用通常不会影响应用程序的内存使用。


SubVIs and MemoryUsage


The executionsystem makes a copy of the control and indicator data of the subVI under thefollowing conditions:


•   The front panelis in memory


•   The front paneluses data printing


•   The block diagramuses Property Nodes that reference front panel controls/indicators


•   The VI uses localvariables


•   The front paneluses data logging


如果调用SubVI,则只将其编译后的代码加载到内存中,除非需要执行前面板。由于各种原因,前面板可能在内存中。其中几个项目需要内存中的前面板才能正常工作。也有可能SubVI配置为在调用时打开前面板。


在“操作”菜单中,可以启用“完成时打印”和“完成时记录”


Tips for reducingmemory usage


•   Operate on datain place


•   Do not overusereentrant settings


•   Close referencesto avoid leaks


•   Avoid operationswhich require the front panel to be in memory


–    Ex: Controlreferences


–    Save the VI andclose the front panel before running


•   Avoid largedefault data in arrays, graphs, etc.


•   Only displayinformation on the front panel when necessary


•   RequestDeallocation Primitive


LabVIEW中局部和全局变量的内存分配


正在编写一个LabVIEW应用程序,需要知道何时分配和解除分配全局变量以进行内存管理。有没有办法以编程方式释放此内存?


解答


局部变量


局部变量的分配发生在调用VI加载到内存中时。如果是独立VI,则局部变量的内存在运行时分配,并在运行结束时释放。如果局部变量在主VI中静态加载的子VI中声明,则局部变量的内存在主VI加载到内存中时分配,并在主VI卸载后不久由LabVIEW内存管理器解除分配。如果子VI是动态加载的,如下图所示,则局部变量的内存在子VI的调用时分配,并在卸载子VI后不久由LabVIEW内存管理器解除分配。

全局变量

全局变量存在于特殊的全局VI中,与应用程序流程分开。当被另一个VI访问时,它们会将变量的副本带入内存。当调用VI从内存中卸载时,此副本将被销毁。请注意,复制大型数组或其他大型变量可能既密集又耗时。


释放内存


LabVIEW无法以编程方式解分配为全局和局部变量预留的内存,但您可以在顶级VI完成之前解除为运行子VI而留出的内存。在子VI完成其操作后实施请求释放VI,以清除子VI的内存。


需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。

相关文章
|
1月前
|
存储 缓存 监控
|
8天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
27 6
|
8天前
|
监控 安全 程序员
如何使用内存池池来优化应用程序性能
如何使用内存池池来优化应用程序性能
|
11天前
|
存储 缓存 Java
结构体和类在内存管理方面的差异对程序性能有何影响?
【10月更文挑战第30天】结构体和类在内存管理方面的差异对程序性能有着重要的影响。在实际编程中,需要根据具体的应用场景和性能要求,合理地选择使用结构体或类,以优化程序的性能和内存使用效率。
|
1月前
|
存储 缓存 监控
Linux中内存和性能问题
【10月更文挑战第5天】
38 4
|
1月前
|
存储 程序员 编译器
C语言——动态内存管理与内存操作函数
C语言——动态内存管理与内存操作函数
|
1月前
|
C++
析构造函数就是为了释放内存,就是在局部指针消失前释放内存,拷贝构造函数就是以构造函数为模块,在堆里面新开一块,同一个变量在堆里面的地址
本文讨论了C++中构造函数和析构函数的作用,特别是它们在管理动态内存分配和释放中的重要性,以及如何正确地实现拷贝构造函数以避免内存泄漏。
37 2
|
1月前
|
存储 缓存 监控
深入了解MySQL内存管理:如何查看MySQL使用的内存
深入了解MySQL内存管理:如何查看MySQL使用的内存
299 1
|
1月前
|
存储 安全 程序员
【C++篇】深入内存迷宫:C/C++ 高效内存管理全揭秘
【C++篇】深入内存迷宫:C/C++ 高效内存管理全揭秘
63 3
|
21天前
|
存储 分布式计算 安全
阿里云服务器内存型r7、内存型r8y、内存型r8i实例规格性能对比与选择参考
在选择阿里云服务器实例规格时,针对内存密集型应用和数据库应用,内存型r7、内存型r8y和内存型r8i实例是这部分应用场景选择最多的热门实例规格。为了帮助大家更好地了解这三款实例的区别,并为选择提供参考,本文将详细对比它们的实例规格、CPU、内存、计算、存储、网络等方面的性能,并附上活动价格对比。让大家了解一下他们之间的不同,以供参考选择。