LabVIEW性能和内存管理 6

简介: LabVIEW性能和内存管理 6

LabVIEW性能和内存管理 6

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

数据空间Dataspaces  

VI的数据存储在它的数据空间中

每个VI都有自己的数据空间

可重入VIs有多个数据空间

可重入性和数据空间

不可重入的


ü  每个调用共享一个数据空间


ü  一次只能执行一个调用


ü  较低的内存使用


ü  可以保存状态(例如,对于lv2风格的全局变量)


标准可重入性,又名“预分配克隆”:


ü  每个调用都有自己的数据空间


ü  调用从不需要等待


合并可重入性,又名“共享克隆”


在LabVIEW8.5中添加


ü  每次调用都从共享池中提取一个数据空间


ü  如果需要,将动态分配新的数据空间


ü  调用从不需要等待(除非可能要分配一个新的数据空间)


ü  递归所需


当一个VI是“可重入的”时,它可以同时被调用多次。它可以通过复制数据空间来实现这一点,这样每个并发调用都有自己的副本。在LabVIEW 8.5之前,对可重入性只有两种设置:开或关。在8.5中,添加了一种新的可重入性,称为“共享克隆”。如果一个VI不是可重入的,那么一次只能执行一个调用,因为该VI只有一个数据空间。这使内存使用更低,并且允许VI使用未初始化的移位寄存器(lv2风格全局变量的基础)在调用之间保存状态。


当将一个VI标记为可重入时,默认是“预分配克隆”。这意味着该VI的每一个调用都有自己唯一的数据空间。因此,一个调用不必等待另一个调用。但是,如果多次调用VI,它有很大的数据空间,这可能会导致内存使用量的大量增加。如果在一个标记为可重入的层次结构中有多个VIs,则此效果将成倍增加。在某些情况下,有人将系统中的每个VI都标记为可重入的,最终导致某些VIs的数千个克隆,这最终导致LabVIEW耗尽内存。仔细选择标记为可重入的Vis:关注那些经常调用和并发调用的。


可重入的新选项被称为“共享克隆”,在内部通常将其称为“池式”可重入。有了这个设置,就有了一个用于VI的数据空间池,每个调用从池中获得一个数据空间。如果池中的所有数据空间都在使用中,则创建一个新的数据空间并将其添加到池中。这具有不可重入和完全可重入的Vis的一些好处:内存使用更低,因为只需要和并发调用一样多的数据空间,SubVI调用不需要等待其他调用完成。然而,他们可能必须等待分配一个新的数据空间。缺点是,存储在VI中的任何状态(例如,在移位寄存器中)都与数据空间相关联,每次调用可能获得不同的数据空间。这使得共享可重入对于全局变量来说不太妙了。


使用递归时,必须将递归VI配置为使用共享克隆。这允许每个递归调用都有一个新的数据空间,这样它就不会阻塞,也不会使用无限的内存。


DataspaceContents


•  A single largeblock of data


•  Execution systemqueue element structures


•  Execution data


–    Wires


–    Temporary data


–    Shift registers


•  Two types:


–    “Top-level”


•       Directly stored in the dataspace


•       Numerics, clusters, array and string handles, etc.


–    “Hair”


•       Not stored directly in the dataspace


•       Referred to by a top-level allocation


•       Can be variable length


•       Array and string contents


在考虑数据空间的内容时,区分数据空间中的两种类型的数据有时很重要。顶层数据是直接存储在数据空间中的数据。例如,数据空间中的每个数字都是数据空间中的一个简单分配,占用该数字所需的字节数。Clusters也直接存储在数据空间中。但是,有些类型的数据并不直接存储在数据空间中。最值得注意的是,数组和字符串内容不存储在数据空间中。相反,数据空间本身包含一个指向存储在其他地方的实际数据的指针。这样做是为了使数据可以是可变大小的。


这很重要,因为当使用“显示缓冲区分配”时,只能看到顶层分配。这些点表示直接在数据空间中的分配。它们不会显示数组何时调整了大小,有时会看到只在错误情况下使用的分配。也就是说,缓冲区分配点不是性能问题,也不是每个由分配引起的性能问题都显示为缓冲区分配点。

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

 

相关文章
|
2月前
|
Kubernetes Cloud Native Java
云原生之旅:从容器到微服务的演进之路Java 内存管理:垃圾收集器与性能调优
【8月更文挑战第30天】在数字化时代的浪潮中,企业如何乘风破浪?云原生技术提供了一个强有力的桨。本文将带你从容器技术的基石出发,探索微服务架构的奥秘,最终实现在云端自由翱翔的梦想。我们将一起见证代码如何转化为业务的翅膀,让你的应用在云海中高飞。
|
19天前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
11天前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
26天前
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
49 11
|
27天前
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
45 11
|
19天前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
38 0
|
2月前
|
开发者 Ruby
揭秘Ruby内存优化的秘密武器!符号(Symbol):为何它能成为你的性能提升神器?
【8月更文挑战第31天】Ruby是一门优雅而强大的编程语言,其设计注重开发者友好与效率。符号(Symbol)作为一种特殊标识符,代表唯一的字符串字面量,在内部以单例形式存在,可显著减少内存消耗。本文将深入探讨符号的机制及其在Ruby中的应用,帮助你通过最佳实践有效利用这一特性。通过将符号用作哈希表的键或代替字符串常量,可以提升程序性能并减少内存使用。然而,过度使用符号可能影响代码可读性,需谨慎权衡。
26 0
|
2月前
|
存储 大数据 Python
NumPy 内存管理和性能调优
【8月更文第30天】NumPy 是 Python 中用于科学计算的核心库之一,它提供了高效的数组操作功能。然而,随着数据集的增大,如何有效地管理和优化 NumPy 数组的内存使用成为了一个重要的问题。本文将介绍一些技巧,帮助你更好地管理和优化 NumPy 数组的内存使用。
45 0
|
2月前
|
监控 算法 Java
Java 内存管理:从垃圾收集到性能调优
【8月更文挑战第5天】 本文将深入探讨 Java 的内存管理机制,特别是垃圾收集器(GC)的工作原理及其在性能优化中的关键作用。通过具体案例分析,我们将了解如何选择合适的垃圾收集算法以及调优 JVM 参数来提升应用性能。文章旨在为 Java 开发者提供实用的内存管理和性能调优技巧,帮助他们编写更高效、更稳定的应用程序。
61 3
|
2月前
|
弹性计算 固态存储 ice
阿里云服务器ECS内存型r8i、通用算力u1、r7、AMD内存r8a、高主频内存hfr8i价格和性能差异
2024年阿里云提供2核16G、4核32G及8核64G等多种服务器配置,用户可根据需求选择不同实例规格如内存型r8i、通用算力型u1等。以华北2(北京)为例,2核16G月费从286.2元起,4核32G从572.4元起,8核64G则从1144.8元起。公网带宽1Mbps预付费为23元/月,系统盘如ESSD PL1按量计费0.0021元/小时/GiB。具体价格与折扣请参考阿里云官网。