07-15-2011 11:45 AM
I am creating a .NET object using assemblies and currently I am saving it to the file globals in order to be used for the rest of the sequence. I am finding that this reference is staying open and causing a communication problem when I rerun the step. What can I do to null/delete the object after the sequence executes?
07-15-2011 11:47 AM
In TestStand if you set an object reference to Nothing then it is similar so:
Locals.MyObjRef = Nothing
Nothing is a reserved word.
07-15-2011 11:50 AM - edited 07-15-2011 11:51 AM
You can set the reference variable to Nothing in an expression, but that doesn't necessarily solve your problem because .NET is a garbage collected language. .NET objects aren't immediately deleted when the last reference to them goes away. The feature of .NET used to more deterministically do cleanup is call IDispose. If your .NET object supports disposing then you should check the "Dispose" checkbox next to the parameter in the .NET adapter which you use to store the object in a TestStand variable. If you do that, then when the teststand variable is set to Nothing, TestStand will call Dispose on the .NET object, which, if the .NET object implements a Dispose method that does the cleanup you require, will resolve the issue.
Hope this helps.
-Doug
10-13-2024 07:26 AM
Let's say we have a subsequence X
and in it, a .NET object is returned to Locals.Ref
. Is it needed to do Locals.Ref = Nothing
at the end of this subsequence for it to call Dispose
? Or maybe ending the context of subsequence X
will also call Dispose
?
10-16-2024 01:24 PM
Based on this https://www.ni.com/docs/en-US/bundle/teststand/page/assigning-values-to-object-references.html
I guess it is automatically disposed.