If you switch to using an array key with your global variable, and then " delete global gArray[yourkey]" it should release the memory.
On Thu, Aug 18, 2016 at 8:28 AM, Ben Rubinstein <benr...@cogapp.com> wrote: > Thanks Monte, Richard. > > As it happens this script isn't doing with properties, which is good (or > bad since that potentially easy fix isn't available to me!) but that's a > useful tip to remember. I've already moved some very large functions to > passing by reference. > > The real problem is that the script was written originally 13 years ago, > and the basic architecture was to load everything into large global arrays > for cleanliness. Over that period, the size of the data has multiplied over > the years by 1-2 orders of magnitude; and meanwhile the processing has been > modified and warped almost continuously, so it's a really complicated rats > nest. The whole project is reaching its sunset, so the client isn't keen to > invest in major refactoring... but just at this point we seem to be > regularly hitting this limit. > > My two biggest problems are: > > - LC just in effect crashes/halts, rather than throwing an error so the > app could at least report the problem > > - as far as I can tell, when I empty globals etc the memory isn't being > recovered. This is really the root of my problem. > > Ben > > > On 18/08/2016 00:26, Monte Goulding wrote: > >> There are certainly a number of tricks you can use to reduce the memory >> usage of your app. One interesting one I learnt recently after an internal >> discussion was because LiveCode copies values that have multiple reference >> when they are mutated and custom properties are arrays linked to the object >> you can save some memory by doing the following: >> >> put the myProp of me into tVar >> set the myProp of me to empty — here we are dereferencing the value so >> LiveCode doesn’t do a deep copy >> MutateVar tVar >> set the myProp of me to tVar >> >> Obviously there’s also passing by reference etc to reduce copies. >> >> The other thing you want to look at doing here is processing data in >> chunks rather than reading it all in. >> >> Cheers >> >> Monte >> >> On 18 Aug 2016, at 3:52 AM, Ben Rubinstein <benr...@cogapp.com> wrote: >>> >>> Please refresh my memory: is there any way to cause/allow garbage to be >>> collected without ending all script running? >>> >>> I have an app which process large amounts of data. It runs fine on Mac, >>> but on Windows intermittently (but not frequently as the application data >>> source, which fluctuates, is gradually increasing) as the total memory in >>> use approaches 2GB, the app faults. >>> >>> Obviously this is very distressing for me and my client, because the app >>> has lost control at this point and can't even tell us what's happening (it >>> normally runs on a schedule on a VM, so it often takes days to discover >>> that the system downstream hasn't been updated for a while, and trace back >>> to find that the LC app is halted). >>> >>> I have managed to reduce the incidence of this by breaking the >>> processing into two parts, but this is undesirable for various reasons, and >>> only palliative. What I really want is a way for my main function to invoke >>> garbage collection after calling some of the larger processing steps. >>> >>> Is there any way to do this? Am I right in thinking that the issue is >>> related to LC's total memory usage reaching 2GB on Windows? Are there any >>> useful functions (e.g. the "hasMemory" function is documented as "only >>> partially implemented, and may not return useful values on some platforms", >>> which makes it seem pretty pointless...)? >>> >> >> _______________________________________________ >> use-livecode mailing list >> use-livecode@lists.runrev.com >> Please visit this url to subscribe, unsubscribe and manage your >> subscription preferences: >> http://lists.runrev.com/mailman/listinfo/use-livecode >> >> > > _______________________________________________ > use-livecode mailing list > use-livecode@lists.runrev.com > Please visit this url to subscribe, unsubscribe and manage your > subscription preferences: > http://lists.runrev.com/mailman/listinfo/use-livecode _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode