LabVIEW避免在使用functional global时内存中有多个大数组的拷贝 点击:197 | 回复:0



fjczd

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

LabVIEW避免在使用functional global时内存中有多个大数组的拷贝

有一个非常大的数组,但想保证在内存中只有一个拷贝.知道可以用移位寄存器,并用"ReplaceArray Subset" VI 保证只有一个拷贝。然而,想使之成为一个functionalglobal。因为,不能初始化这个移位寄存器,要找到一种方法来指定数组的类型。如果在循环中使用"InitializeArray" VI,将会导致内存中其他的拷贝。

解答:

举个例子,按照下面的尝试:

1) 关闭所有打开的VI,但保留LabVIEW打开。

2) 打开附件中的例子"TwoCopies in Memory.vi" 但不要运行它。

3) 打开Windows任务管理器,注意已经被LabVIEW使用的内存。

4) 保持缺省值不变,运行VI,注意到因为LabVIEW内存使用增加20 megabytes。这个缺省的设置导致一个含有1276900个双精度元素,即8个字节的数组,相当于大概10 megabytes。因为在内存中有两个数组拷贝,所以导致增加20megabytes。

另外一个方法,可以观察LabVIEW缓存的分配,通过选择Tools » Advanced » Show Buffer Allocations。应该看到一个分配在移位寄存器,另外一个拷贝在"Initialize Array" VI。

可通过"Reshape Array" VI替换"Initialize Array" VI来指定数组的类型。通过这个方法,始终是对同一个数组进行操作,而不会在内存中造成额外的拷贝。

可通过下面的步骤看到这个效果:

1) 关闭所有打开的VI,保留LabVIEW打开。

2) 打开下面附件的例子程序"OneCopy in Memory.vi"但不要运行它。

3) 打开Windows任务管理器,并注意LabVIEW使用的内存。

4) 保留缺省值,运行VI。并注意内存使用大概增加了10 megabyte。 在这种情况下,只有一个10 megabyte 数组的拷贝。

另外一个方法,可以通过在LabVIEW中看内存的分配,通过选择Tools » Advanced » ShowBuffer Allocations。应该看到只是在给移位寄存器分配了内存。

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

参见word中的附件




楼主最近还看过


热门招聘
相关主题

官方公众号

智造工程师