当前位置:网站首页>LabVIEW is opening a new reference, indicating that the memory is full
LabVIEW is opening a new reference, indicating that the memory is full
2022-07-07 05:21:00 【LabVIEW development】
LabVIEW Open a new reference , Prompt memory is full
function LabVIEW Code , Received error 2 LabVIEW: The memory is full . The error occurred when creating a VI When a new reference of , for example ( Get notifier , Get the queue , open VI quote ,.NET Constructor node , open / establish / Replace files, etc ). Why did you receive this error , How to avoid ?
answer : LabVIEW Use a limited amount of memory to store each type of reference . therefore , For each type of reference , The number of simultaneous openings is limited to 1048575. therefore , When this amount is reached , Any block diagram function that creates a new reference in memory may return this error .
Edit switch to center
Add picture comments , No more than 140 word ( Optional )
This indicates a reference leak in the code . References are not closed correctly , And finally 1048575 References of the same type are opened at the same time . Try opening the second 1048576 This error occurs when there are references . To prevent the reference limit from being reached , Please modify the application , In order to use the corresponding... When the reference is no longer used VI( For example, release notifier , Release the queue , Close references, etc ) To close references .
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.
Edit switch to center
Add picture comments , No more than 140 word ( Optional )
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.
edit
Add picture comments , No more than 140 word ( Optional )
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.
edit
Add picture comments , No more than 140 word ( Optional )
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.
edit
Add picture comments , No more than 140 word ( Optional )
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.
edit
Add picture comments , No more than 140 word ( Optional )
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.
edit
Add picture comments , No more than 140 word ( Optional )
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.
Edit switch to center
Add picture comments , No more than 140 word ( Optional )
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 Development 、LabVIEW Programming 、LabVIEW Program
Examples and information mentioned above , Both in word In the attachment in , Click to download . Learn more , Can you contact us .
边栏推荐
猜你喜欢
随机推荐
Salesforce 容器化 ISV 场景下的软件供应链安全落地实践
照片选择器CollectionView
2039: [Bluebridge cup 2022 preliminaries] Li Bai's enhanced version (dynamic planning)
精彩速递|腾讯云数据库6月刊
2. Overview of securities investment funds
JVM(十九) -- 字节码与类的加载(四) -- 再谈类的加载器
vector和类拷贝构造函数
JVM(二十) -- 性能监控与调优(一) -- 概述
Simulate thread communication
【js组件】自定义select
How can project managers counter attack with NPDP certificates? Look here
Dbsync adds support for mongodb and ES
AIDL 与Service
Development thoughts of adding new requirements in secondary development
As we media, what websites are there to download video clips for free?
基于Bevy游戏引擎和FPGA的双人游戏
高数中值定理总结
Addressable 预下载
漏电继电器JOLX-GS62零序孔径Φ100
利用OPNET进行网络指定源组播(SSM)仿真的设计、配置及注意点