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