LabVIEW性能和内存管理 4 点击:192 | 回复:0



fjczd

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:552帖 | 36回
  • 年度积分:703
  • 历史总积分:1294
  • 注册:2008年8月14日
发表于:2022-11-16 20:05:39
楼主

LabVIEW性能和内存管理 4

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

传输缓冲区

传输缓冲区保护操作缓冲区和执行缓冲区之间的数据传输

只有当前面板在内存中时才更新

为了保护操作和执行缓冲区之间的数据传输,LabVIEW使用传输缓冲区。当您处理大型数据集,并且必须显示对该数据的操作时,这可能会导致更多的内存使用。传输缓冲区和执行将在“优化执行速度”中介绍。

局部变量和全局变量

局部变量更新数据传输缓冲区。

读取本地或全局变量总是会导致数据复制

在可能的情况下使用连线传输数据

注意,在左边的示例中,当使用连线传输数据时,只需要分配1个缓冲区。如果从控件的局部变量读取,则生成一个副本。在本例中,生成了三个副本,每个读取的局部变量对应一个副本。同样,如果局部变量包含大型集群或数组,则这一点更加重要。请注意,即使从同一个变量读,然后再写,这也适用。局部变量永远不能原地操作,因为局部变量可能引用传输缓冲区,而不能对传输缓冲区进行原地操作。

本地变量与VI服务器属性节点

局部变量

可以在任何线程中运行

复制到/从传输缓冲区

如果前面板在内存中,写操作会导致第二次拷贝进入操作缓冲区(尽可能避免)

在速度很重要的时候使用

属性节点

必须在UI线程中运行

复制到/从操作缓冲区

写操作导致第二次拷贝进入传输缓冲区

在内存中强制前面板

需要同步显示时使用

如果可能的话,两者都要避免

这里列出的规则是针对VIServer属性节点的——它们不适用于用于DAQ、LV类等的属性节点。

Data by Reference

操作对数据的引用,而不是数据本身

分支连线可能导致连线上的数据的副本。如果多个分支修改该值,或者一个分支在另一个分支完成使用原始值之前修改该值,那么这总是正确的。数据值参考(DVR)允许在不复制的情况下操作数据。这在处理性能关键型应用程序中的大型数组时尤其有用。

考虑一下这个场景:你给朋友发电子邮件,与他们分享视频。如果你在电子邮件中包含了整个视频,朋友们会很生气,因为这个文件占了他们收件箱的空间。所以,你要附上在线视频地址的链接。因为所有的收件人都在网上引用同一个地点,所以每个人都能看到最新版本的视频,以防它被修改。

Data ValueReferences

作为数据的引用,而不是完整的数据本身

能否保护对数据的访问

在LabVIEW2009中引入的数据值参考和single element queues是传输大型数据集的非常有效的方法。在“内存优化”中介绍更多关于这些结构的知识,但它们之所以值得一提,是因为它们有助于在整个VI层次结构中移动大型数据集,同时最小化内存使用。重要的是要注意,必须使用InPlace Element结构来访问数据值引用的数据。

 

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




楼主最近还看过


热门招聘
相关主题

官方公众号

智造工程师