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

相关文章
|
2月前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
206 77
|
2月前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
150 62
|
2月前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
82 31
|
1月前
|
存储 监控 算法
Java内存管理深度剖析:从垃圾收集到内存泄漏的全面指南####
本文深入探讨了Java虚拟机(JVM)中的内存管理机制,特别是垃圾收集(GC)的工作原理及其调优策略。不同于传统的摘要概述,本文将通过实际案例分析,揭示内存泄漏的根源与预防措施,为开发者提供实战中的优化建议,旨在帮助读者构建高效、稳定的Java应用。 ####
47 8
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
161 7
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
81 1
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
68 4
|
2月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
62 6
|
2月前
|
监控 安全 程序员
如何使用内存池池来优化应用程序性能
如何使用内存池池来优化应用程序性能
|
2月前
|
存储 缓存 Java
结构体和类在内存管理方面的差异对程序性能有何影响?
【10月更文挑战第30天】结构体和类在内存管理方面的差异对程序性能有着重要的影响。在实际编程中,需要根据具体的应用场景和性能要求,合理地选择使用结构体或类,以优化程序的性能和内存使用效率。