LabVIEW 中的大数据的操作 合理应对"memory is full"

 官方的解答

在LabVIEW中开发一个大型项目。虽然还有足够可用的RAM空间,偶尔会收到 Memory is Full 错误



解答: 在LabVIEW中处理过于庞大的数组时,通常发生这种错误。LabVIEW默认在连续的内存空间上存储数组。当LabVIEW无法在RAM中开辟一个足够大的连续的内存空间存储你的数组时,报错Memory is Full 。例如,一个2000x2000 双精度数组大约需占据32 MB内存。你至少需要32 MB以上的空闲RAM空间,并且保证它们是连续的,才不至于报错。有多种方法可以解决这一错误:

  • 为你的数组使用一个占用内存空间更小的数据类型。例如,如果你存储的数据范围仅为0到100,可以使用U8代替其他整数类型表示数据,如此占用的内存空间仅为默认数据类型双精度表示的1/8。
  • 如果这一错误产生于图形化显示数据,有一个更为简单的处理方法。对于一个过大的数组,你一次性图形化显示所有数组数据,可能无法看清每一个数据点(受限于屏幕支持的分辨率)。此时,最好在图形化显示数据前,对数据进行抽取处理(例如,每两个数据点仅显示其一)。
  • 更改数据算法压缩数据量,例如使用"chunking"。尽管这会复杂化算法,但是你可以得到更小的数据量。以下链接提供了压缩数据算法的详细说明:
    Managing Large Data Sets in LabVIEW
  • 使用高效能数据分析包完成对过大数组的处理,例如NI DIAdem.
  • 为你的系统配置更大的虚拟内存空间。以下链接提供了相关的详细说明:
    How Can Virtual Memory Help With Memory Issues in LabVIEW?
  • 你可以使用Profile Performance and Memory Window.进一步分析VI内存使用情况。

在LabVIEW的control 或者indicator中显示较大的数据会产生很大的copy量。这源于LabVIEW的数据流机制,所以在显示时抽取decimation是非常有必要的。

 

但是,实际应用中的情况多种多样,比如我在应用时就并非上述情况,根据debug发现是在调用LabVIEW求根函数时,并未检查数据的正确性而引起的。

所以,发现类似的情况,还要看下是不是程序中错误处理机制的问题。

你可能感兴趣的:(LabVIEW 中的大数据的操作 合理应对"memory is full")