LabVIEW在打开一个新的引用,提示内存已满

2023-10-08 13:40

本文主要是介绍LabVIEW在打开一个新的引用,提示内存已满,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LabVIEW在打开一个新的引用,提示内存已满

运行LabVIEW代码时,收到错误2 LabVIEW:内存已满。错误发生于创建一个VI的新引用时,例如(获取通知器,获取队列,打开VI引用,.NET构造函数节点,打开/创建/替换文件等)。为什么会收到此错误,如何避免?

解答: LabVIEW使用有限量的内存来存储每种类型的引用。因此,对于每种类型的引用,同时打开的数量被限制为1048575。因此,当到达这个数量后,任何在内存中创建新引用的框图函数可能会返回此错误。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这表示代码中的引用泄漏。引用没有正确关闭,并且最终1048575个同一类型的引用同时打开。尝试打开第1048576个引用时会出现此错误。要防止达到引用限制,请修改应用程序,以便在引用不再使用时使用相应的VI(例如释放通知器,释放队列,关闭引用等)来关闭引用。

Closing References in LabVIEW

Whenyou open a reference to an application, project, VI, or other reference source,LabVIEW allocates memory to store that reference. To free up the space inmemory where LabVIEW stored the reference source, you must close the reference.It is always safe to close a reference when you no longer need it. You can usethe Close Reference function (linked below) to close a reference.

VI Server References

VIServer references are reference types found under the SelectClass»VI Server shortcut menu item that appears when youright-click a property or invoke node, as shown in the following block diagram.VI Server references include references to applications, projects, libraries,controls, VIs, and so on.

编辑切换为居中

添加图片注释,不超过 140 字(可选)

Knowingwhen to close a VI Server reference and when you can safely leave a referenceopen can be difficult. However, unless you are certain you can safely leave areference open, always close references when you no longer need them.

Reference Functions

Ifyou open a reference using an Open VI Reference function, New VI function, orsimilar function, LabVIEW creates a new reference every time LabVIEW calls thereferenced VI. Close these references each time you open them to avoid creatingadditional memory allocations for each reference.

Multiple Calls toProperty and Invoke Nodes

WhenLabVIEW calls a Property or Invoke Node multiple times, LabVIEW does notprovide any method for checking whether LabVIEW returns the exact samereference for each call or allocates a new reference for each call. In thefollowing example, LabVIEW calls a Property Node multiple times, but providesno way of knowing whether the property will return the same reference each timeLabVIEW calls it.

编辑

添加图片注释,不超过 140 字(可选)

Becauseyou cannot be sure that LabVIEW does not create a new reference allocation foreach call, close these references, as shown in the following block diagram, toavoid any potential reference leaks.

编辑

添加图片注释,不超过 140 字(可选)

Reference Leaks

Ifyou do not close a reference, your application is susceptible to referenceleaks that can use up memory and slow the execution time of the application.LabVIEW automatically closes a reference when the top-level VI that opened thereference goes idle, but if the application runs for extended periods of time,the effects of reference leaks gradually increase.

Usethe following guidelines to determine which VI is a top-level VI:

§If theRun VI method runs a VI, that VI is a separate top-level VI.

§If a CallBy Reference node calls a VI, that VI is considered a subVI of the calling VIunless the VI being called is a remote VI.

§If aStart Asynchronous Call function makes a call-and-forget VI call, that VI is aseparate top-level VI.

§If aStart Asynchronous Call function makes a call-and-collect VI call, that VI isconsidered a subVI of the calling VI.

Tip Youcan use the Call Chain function (linked below) to identify the top-level VIunless you use a Start Asynchronous Call function to call the VI.

Referenceleaks to larger sources, such as VIs, projects, libraries, and so on, have agreater impact on memory usage and execution speed than references to smallersources, such as controls or objects within a VI. For example, if LabVIEW leaksa control reference, LabVIEW stores refnums and related control data in memory.However, if LabVIEW leaks a VI reference, LabVIEW stores a whole VI in memory.

IfLabVIEW leaks a VI reference, your program may behave incorrectly if you expectLabVIEW to unload the VI and reset the state of the VI for the next call. Toavoid reference leaks, close all references when you no longer need them.

Note Ifyou attempt to close a project reference, LabVIEW may not remove the project inmemory even if you close all references to that project because either theProject Explorer window is open or a library reference that contains theproject is open. You can use the Close method (linked below) to close allreferences to all items in a project.

Exceptions

ImplicitReferences and Unwired Property and Invoke Nodes

Althoughyou should usually close references when you no longer need them, you can leaveimplicit references and references returned in the referenceout terminal of unwired property and invoke nodes open,shown below, because a Close Reference function does not actually close thesereferences or remove the target objects from memory.

编辑

添加图片注释,不超过 140 字(可选)

Leaving these references open also creates a slightlycleaner block diagram by not cluttering the code with a Close Referencefunction.

Closing VIReferences that Have Child Object References

Youcan close child object references when you no longer need them, but closing theparent VI reference automatically closes child object references of that VI.However, if you close the parent VI reference before LabVIEW calls a childobject reference, the child object reference may become invalid. Make sure towire block diagram objects so each function executes in the order you want.

Inthe following example, if you close the VI reference immediately after LabVIEWopens the VI reference, the front panel reference may become invalid beforeLabVIEW can get the class name.

编辑

添加图片注释,不超过 140 字(可选)

Closethe VI reference only when you no longer need the front panel reference to makesure the front panel reference remains valid, as shown in the following blockdiagram.

编辑

添加图片注释,不超过 140 字(可选)

Inthe previous example, you do not need to close the front panel referencebecause the front panel reference closes when you close the VI reference.However, if you close the front panel reference, you must do so before closingthe VI reference. Otherwise, LabVIEW may return an error when LabVIEW attemptsto close the front panel reference.

Asynchronous Behavior of the CloseReference Function

Whenyou close a reference using the Close Reference function, LabVIEW closes andinvalidates the refnum immediately. However, LabVIEW does not alwaysimmediately dispose of the object in memory. LabVIEW may dispose of the objectwhen LabVIEW calls the Close function or anytime after LabVIEW calls the Closefunction.

Inthe following example, the Open VI Reference function loads the target VI intomemory. LabVIEW closes the reference after getting the name of the target VI.In this example, LabVIEW may dispose of the target VI in memory when LabVIEWcalls the Close function or LabVIEW may dispose of the target VIasynchronously.

编辑切换为居中

添加图片注释,不超过 140 字(可选)

Inthe previous example, closing the VI reference immediately before or inparallel to the second Open VI Reference function creates a race condition.LabVIEW may dispose of the target VI in memory before the second Open VIReference function can open a reference to the target VI. However, LabVIEW alsomay keep the target VI in memory long enough for the second Open VI Referencefunction to call the target VI.

Tip Youcan use the All VIs in Memory property to display and monitor when a VI leavesmemory.

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

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

LabVIEW在打开一个新的引用,提示内存已满 - 北京瀚文网星科技有限公司 (bjcyck.com)

这篇关于LabVIEW在打开一个新的引用,提示内存已满的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/165678

相关文章

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

电脑提示Winmm.dll缺失怎么办? Winmm.dll文件丢失的多种修复技巧

《电脑提示Winmm.dll缺失怎么办?Winmm.dll文件丢失的多种修复技巧》有时电脑会出现无法启动程序,因为计算机中丢失winmm.dll的情况,其实,winmm.dll丢失是一个比较常见的问... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

Java资源管理和引用体系的使用详解

《Java资源管理和引用体系的使用详解》:本文主要介绍Java资源管理和引用体系的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Java的引用体系1、强引用 (Strong Reference)2、软引用 (Soft Reference)3、弱引用 (W

vscode不能打开终端问题的解决办法

《vscode不能打开终端问题的解决办法》:本文主要介绍vscode不能打开终端问题的解决办法,问题的根源是Windows的安全软件限制了PowerShell的运行,而VSCode默认使用Powe... 遇到vscode不能打开终端问题,一直以为是安全软件限制问题,也没搜到解决方案,因为影响也不大,就没有管

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊