Armando, Vectors are new to Maptitude 6.0. If you need your code to be compatible with 5.0 then you cannot use them. -Kjartan From: [email protected] [mailto:[email protected]] On Behalf Of Armando Scalise Sent: Tuesday, February 22, 2011 10:16 AM To: [email protected] Cc: Kjartan Stefansson Subject: Re: [Maptitude] Garbage colleciton and memory management in GISDK Thank you Kjartan. A very clear explanation. It t helps me understand better the issues involved in arrays creation. I thought vectors were new to 6.0. Were they available in 5.0? Thanks again On Tue, Feb 22, 2011 at 11:12 AM, Kjartan Stefansson <[email protected]> wrote: Armando, Memory associated with GISDK macro variables is freed when the variables are set to null or when the macro exits. The only exceptions to this is when the value is stored in a shared, static or a global variable, then the value persists throughout the session and will not be freed until the shared variable is set to null. If that is not done, it persists until the program shuts down. How you resize your arrays can affect memory performance. As you note, myArray = myArray + {value} is slower than using dim[]. In the end, the same theoretical amount of memory would be used. However, there might be some memory fragmentation taking place as a result. I see you are familiar with vectors. I would encourage you to use them as they are more efficient than arrays. Since all the vector elements are of the same type, less memory is used for every element (the type information only needs to be stored once for the vector, instead of once for every element). And the vectors offer many very efficient operations. You can add them (v3 = v1 + v2), use them in conditional expressions (w = if v>0 then 1 else 0) and you can pass them to functions (w = 1+sin(v)). In many cases a single statement can replace a potentially slow GISDK loop on arrays. -Kjartan From: [email protected] [mailto:[email protected]] On Behalf Of Armando Scalise Sent: Monday, February 21, 2011 12:19 PM To: [email protected] Subject: [Maptitude] Garbage colleciton and memory management in GISDK I wonder wehter someone in Caliper could shred some light into memory mangement and garbage colleciton in GISDK I am bumping into memory issues in a macro that handles very large (millions of records) multidimensional arrays. My initial macro had a number of those arrays defined, so I splitted the code and use the vectors one at a time in separate macros. The memory issues still persist Before rewriting my code to a disk-based data management as opposed to using memory arrays. I would very much appreciate if you could provide some input on the folloiwng questions: - Does GISDK frees up all the memory macro uses (for exmaple, arrays that are only used within the macro and not passed back as ouput) once the macro is terminated? - If so, when does this happen? immediately after the macro is finished? or randomly? - If I have a large array in a macro, and I set it to null before leaving the macro, does that liberates memory immediately? - Does an expression like myArray = myArray + {newvalue} when used recursively imposes a toll on memory usage? (I know that Dim myArray[n] is more efficient, but often times I ignore the dimension the array will end up having) - Are there any specific guidliness or reccomendations for using large arrays in the DK? Thanks -- Armando Scalise
-- Armando Scalise
