LabVIEW中内存已满的错误 点击:156 | 回复:0



fjczd

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

LabVIEW中内存已满的错误

在LabVIEW中开发大型应用程序时,有时会收到以下错误消息:

 image.png

有大量的可用内存,为什么会收到此错误消息?

解决方案

在开发具有大型数组,簇或波形的应用程序时,通常会遇到此错误消息。由于LabVIEW将每个数据集存储在一个连续的内存块中,因此计算机上可用的内存块可能无法满足存储要求。

以下是一些有助于防止出现此错误消息的建议:

减少数组,簇和波形使用的内存

如果有一个大型数组,请尽可能使用较小的数据类型来表示数组中的元素。例如,如果数组中的元素用双精度浮点数(DBL)表示,但可能的期望值范围是0到100之间的整数,则可以更改数组中的数据类型为无符号8位整数(U8)。 U8这种数据类型占用内存为DBL数据类型占用内存的八分之一。

在LabVIEW 8.5及更高版本中,使用 放置元素结构(In Place Element Structure),来避免使用数组,簇或波形的副本。

如果要绘制来自大型数组的数据波形,请使用最大值最小值抽取(max-min decimation)来避免绘制每个数据点的波形。

使用配置文件性能和内存工具帮助缩小范围并确定哪些VI与内存的使用相关 。

分析大型数据集以确定内存已满的位置。采用数据流式传输或向磁盘中写入数据时,使用高性能的分析和报告工具,如TDMS文件和NI DIAdem软件。

 少应用程序中的内存使用量

要限制LabVIEW复制数据的次数,请减少应用程序中的全局变量和局部变量的数量。避免使用变量,而应考虑使用生产者/消费者设计模式 或新数据参考值函数来创建对数据的引用。

将大型VI拆分成若干子VI,并使用“按引用节点调用”动态调用子VI。在VI动态调用子VI之前,子VI不在内存中。

尽可能将大型子VI设置为不可重入VI 。非重入是Windows和Real-Time VI的默认设置。

使用NI LabVIEW桌面执行跟踪工具包来识别可能影响性能的问题,例如内存泄漏和参考泄漏。该工具包还可以收集底层信息,如调用链,线程ID和定位虚拟内存,以及配置文件VI,可执行文件和共享库等。

 增加LabVIEW内存

增加系统的虚拟内存。

注意LabVIEW可以分配的内存量取决于所使用的LabVIEW软件和操作系统的位数。

考虑使用64位的LabVIEW ,它允许更多的内存使用,但不支持LabVIEW 32位的所有模块,工具包和驱动程序。 LabVIEW 32位与64位应用程序常见问题解答中列出了以上差异。

闭LabVIEW中的引用

当您打开应用程序,项目,VI或其他参考源的引用时,LabVIEW会分配内存来存储该引用。要释放LabVIEW存储参考源的内存空间,必须关闭引用。您可以在LabVIEW中关闭引用阅读更多有关信息。

相关信息

如果LabVIEW无法为阵列分配足够大的内存块,则此错误消息最常见。例如,大小为2,000乘2,000个元素的双精度浮点数的2D数组使用大约32 MB。即使32 MB的内存可用,您也可能没有足够大的连续内存块用于阵列。

当包含多于2 ^ 31个元素的数组用于索引For循环时,也会生成此消息。数组最多可包含2 ^ 32个元素,但For循环最多只能索引2 ^ 31个值。这是因为N终端使用带符号的32位整数(I32)数据类型而不是无符号32位整数(U32)数据类型。 I32数据类型的最高有效位用于指定值是正还是负。

请参考附件的例程。


更详细的内容,参加如下附件的介绍。


LabVIEW、LabVIEW开发、LabVIEW编程、LabVIEW程序

上文中提到的例子和资料,均在word中的附件里,可点击下载。进一步了解,可联系们。

http://www.bjcyck.com/nd.jsp?id=434#_np=2_358




楼主最近还看过


热门招聘
相关主题

官方公众号

智造工程师