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开发等相关项目,可联系们。

相关文章
|
4月前
|
存储 缓存 网络协议
阿里云内存型实例规格性能、价格、适用场景与选型指南参考
阿里云服务器ECS(Elastic Compute Service)提供了多样化的内存型实例规格族,专为需要高性能内存资源的应用场景设计。从最新的r8a系列到经过优化的re6p系列,阿里云内存型实例旨在提供稳定、高效且安全的计算环境。这些实例不仅具备强大的计算性能与内存配比,还通过支持ESSD云盘和高效网络协议,显著提升了存储I/O能力和网络带宽,适用于大数据分析、高性能数据库、内存密集型应用等多种场景。本文将详细解析阿里云ECS中的多个内存型实例规格族,包括它们的核心特点、适用场景、实例规格及具体指标数据,为用户在选型时提供参考。
阿里云内存型实例规格性能、价格、适用场景与选型指南参考
|
4月前
|
存储 分布式计算 安全
阿里云服务器内存型实例怎么选?r7/r8y/r8i实例性能、适用场景与选择参考
在选择阿里云服务器时,针对内存密集型应用和数据库应用,内存型实例因其高内存配比和优化的性能表现,成为了众多用户的热门选择。在目前阿里云的活动中,内存型实例主要有内存型r7、内存型r8y和内存型r8i实例可选。为了帮助大家更好地了解这三款实例的区别,本文将详细对比它们的实例规格、CPU、内存、计算、存储、网络等方面的性能,并附上活动价格对比,以便用户能够全面了解它们之间的不同,以供选择和参考。
|
3月前
|
存储 缓存 数据挖掘
阿里云服务器实例选购指南:经济型、通用算力型、计算型、通用型、内存型性能与适用场景解析
当我们在通过阿里云的活动页面挑选云服务器时,相同配置的云服务器通常会有多种不同的实例供我们选择,并且它们之间的价格差异较为明显。这是因为不同实例规格所采用的处理器存在差异,其底层架构也各不相同,比如常见的X86计算架构和Arm计算架构。正因如此,不同实例的云服务器在性能表现以及适用场景方面都各有特点。为了帮助大家在众多实例中做出更合适的选择,本文将针对阿里云服务器的经济型、通用算力型、计算型、通用型和内存型实例,介绍它们的性能特性以及对应的使用场景,以供大家参考和选择。
|
5月前
|
弹性计算 固态存储 ice
阿里云服务器ECS内存型2核16G、4核32G和8核64G配置实例、费用和性能参数表
本文整理了2025年阿里云服务器租赁价格表,涵盖2核16G、4核32G和8核64G配置收费标准。CPU内存比为1:8,提供多种实例规格如ECS内存型r8i、通用算力型u1等。价格由CPU内存、公网带宽及系统盘组成,支持优惠折扣(年付6.7折起)。文中详细列出各配置参考价格、公网带宽与系统盘收费,并对比不同实例规格性能,如Intel Xeon和AMD EPYC处理器系列,帮助用户选择高性价比方案。具体价格以阿里云官网为准。
772 4
|
10月前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
372 77
|
10月前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
509 62
|
9月前
|
存储 监控 算法
Java内存管理深度剖析:从垃圾收集到内存泄漏的全面指南####
本文深入探讨了Java虚拟机(JVM)中的内存管理机制,特别是垃圾收集(GC)的工作原理及其调优策略。不同于传统的摘要概述,本文将通过实际案例分析,揭示内存泄漏的根源与预防措施,为开发者提供实战中的优化建议,旨在帮助读者构建高效、稳定的Java应用。 ####
157 35
|
10月前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
283 31
|
9月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
910 7
|
10月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
262 1