LabVIEW使用数据引用减少内存

简介: LabVIEW使用数据引用减少内存

概览 NI LabVIEW 省略了 开发 软件时 需要 手动 管理 内存。LabVIEW 编译器 始终 会 分析 您 的 代码, 以 确定 如何 优 化 性能 并 减少 所需 的 内存 量。但是, 想要 更多 控制 内存 分配 的 高级 用户 可以 在 LabVIEW 2009 中创建 数据 引用。

背景 分支 线路 通常 要求 LabVIEW 在 线路 上 创建 数据 的 副本。如果两个分支都修改该值,或者如果一个分支在使用原始值完成之前修改该值,则始终如此。使用 LabVIEW 工具 中的 “显示 缓冲 器 分配” 选项 来 突出显示 编 譯 器 将 分配 额外 内存 的 位置。 返回页首 基本示例 “新建数据值引用”节点将任何数据作为输入,并创建对数据的引用。请注意,如果数据被分叉并在其他地方使用,则仍可能发生复制。


53cc08c410fe33dc93ae4f24ce577c75.jpg



编辑


添加图片注释,不超过 140 字(可选)


图1.“新建数据值引用”节点创建对数据的引用,可用于以序列化方式传输和访问数据。 两个新节点可用于就地元素结构,以对数据进行操作,并在原始内存位置替换数据。同一个VI中可以存在多个就地元素结构,但一次只能对来自参考的数据进行操作,因为它们是阻塞函数以防止竞争条件。


1c28403d4a587bb01c32b0d60f7943e6.png



编辑切换为居中


添加图片注释,不超过 140 字(可选)


图2.此VI代码段说明了如何使用此功能的示例。要在LabVIEW 2009中尝试此示例,请将图像拖到框图中。 为了帮助您理解此图,请考虑下图中显示的各个组件:


  1. 为其创建引用的数据的值为 5。
  2. “新数据值”Reference.vi 为这位数据创建引用。
  3. 这是数据引用的常量外观的示例。
  4. 就地元素结构具有一对用于数据值引用读/写的节点,分别用于取消引用和重新引用数据。此结构阻止执行使用相同引用的其他结构,直到它完成并且数据被重新引用。
  5. 如果引用无效,则数据值引用读取节点的错误输出线为“True”。您还将从写入值引用节点收到此工作,因此您不必合并这些错误。
  6. “删除数据值”Reference.vi 结束引用的生存期并返回最后一个已知值。
  7. 这是前面板指示器的终端示例。


错误处理 如果 您 需要 同时 获取 多个 参考, LabVIEW 将 在 结构 边界 处 等待, 直到 获取 了 所有 参考 源。如果任何引用是错误的引用,则必须将所有错误合并在一起,然后才能知道是否要执行任何工作。 返回页首 对类使用引用 可以将数据引用用于任何数据类型,包括类。LabVIEW 类 具有 分层 关系, 对 类 的 引用 模拟 该 层次 结构。换句话说,期望父类引用的子VI可以传递子类引用。 LabVIEW 类 的 配置 选项 可 让 您 能够 限制 创建 和 销毁 对 类 成员 VI 的 引用。您可以保证,只要您在任何其他VI的图上遇到该类型,对该类的任何引用都是通过正确的初始化方法定义的。



a9b0876319c4a6b45315e8c1ab885ffd.png


编辑


添加图片注释,不超过 140 字(可选)


图3.您 可以 从 LabVIEW 类 的 属性 对话框 中 限制 对 类 的 引用 的 创建 和 删除。 如果类被标记为只有成员VI可以为该类创建引用,那么当您尝试在任何其他VI的图上创建对该类类型的引用时,New Data Reference函数就会中断 - 默认情况下启用此功能。不能限制对类的集群或类的数组的引用。 必须在运行时维护引用的类型,这意味着不能交换数据值。借助 新的 保留 运行 时间 Class.vi 基元, LabVIEW 可以 保证 运行 时间 类型 的 一致性, 您 可以 使用 该 来 交换 两个 值。如果需要允许您更改基础对象的类引用,请创建对该类的集群的引用。这使您能够以分层强制转换为代价交换值。


a9004c06d4053016c8b45196cfe25c7f.jpg



编辑


添加图片注释,不超过 140 字(可选)


图4.“保留运行时 Class.vi”使您能够交换不同引用的值。 第二个选项允许父类成为所有后代类型引用的独占工厂,默认情况下禁用。该限制的工作方式与对类本身的引用的限制相同。 如果您有子类的数据引用,则可以使用“到更多”Generic.vi 向上转换为父类引用。同样,以后可以使用“到更多”Specific.vi 将引用恢复为原始类型。当您将 ref-to-child-class 连线连接到 ref-to-parent-class 终端时,会出现向上投射强制点。

相关文章
|
7天前
|
存储 编译器 C语言
数据存储以及内存
数据存储以及内存
19 1
|
20小时前
|
消息中间件 存储 安全
【消息队列开发】 实现MemoryDataCenter类——管理内存数据
【消息队列开发】 实现MemoryDataCenter类——管理内存数据
|
7天前
|
存储 C语言
[C进阶] 数据在内存中的存储——浮点型篇
[C进阶] 数据在内存中的存储——浮点型篇
|
7天前
|
存储 小程序 编译器
[C进阶] 数据在内存中的存储——整形篇
[C进阶] 数据在内存中的存储——整形篇
|
11天前
|
存储 小程序
数据在内存中的存储
数据在内存中的存储
18 1
|
12天前
|
存储 算法 编译器
C语言:数据在内存中的存储`
C语言:数据在内存中的存储`
22 0
|
13天前
|
存储 小程序 编译器
C语言进阶—深度剖析数据在内存中的存储
C语言进阶—深度剖析数据在内存中的存储
|
20天前
|
存储
浮点数在内存中的存储
浮点数在内存中的存储
28 0
|
17天前
|
存储 算法 关系型数据库
实时计算 Flink版产品使用合集之在Flink Stream API中,可以在任务启动时初始化一些静态的参数并将其存储在内存中吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
93 4
|
18天前
|
存储 小程序 编译器
数据在内存中的存储(探索内存的秘密)
数据在内存中的存储(探索内存的秘密)
112 0