ThinkGeo.com    |     Documentation    |     Premium Support

OutOfMemory Exception when Isolines are generated for large grid

Our application is a 32-bit application which we normally run on computers configured with 4 GB of RAM.  This allows the application to use approximately 1.4-1.5 GB of RAM before it gets a OutOfMemory exception.  I have also configured the machine and set the application to use "/LARGEADDRESSAWARE flag which allows the application to continue running until it reaches 2.0 GB of RAM.


We are trying to plot some rather large grids using the Isoline features in MapSuite.  It is plotting okay until we reach grid sizes nearing 2000 x 2000.  We have one grid that fails because the application received an OutOfMemory exception.  The grid size on this plot is 1727 x 2255 which is slightly less than 4,000,000 cells.  The grid has a large quantity of "NoDataValue" cells which are being filled with the Value I have defined as "NoDataValue".  I am bypassing the code which generates the isolines using either GridIsoLineLayer or InMemoryGridIsoLineLayer . All the code is generateing is the GridFeatureLayer from the GridFile (to display shading between the isolines). 


I am able to generate the GridFeatureLayer with around 5 ClassBreaks defined.  After the layer is generated my memory usage is around 0.9 GB.   The application then attempts to display the layer by calling the winformsMap1.Refresh.  Initially, the memory usage drops to around 0.5 GB but then quickly (in a few minutes) climbs to 1.4 GB at which time it throws an OutOfMemory exception.  I am catching the exception but it will repeat everytime the winformMap1.Refresh is called until I remove the GridFeatureLayer from the map overlays.


We will be building our application as a 64-bit app at some time in the future which should alleviate this issue but in the meantime is there anything that can be done to use paging or some other memory management to avoid the OutOfMemory exception. Why does the refresh require so much memory when the GridFeatureLayer has already been created?


Thanks for any input or suggestions.


Richard


 


 



Hello Richard, 
  
 Thanks for your detail information. You can split your grid data, generate a collection of GridFeatureLayer and GridIsoLineLayer, add them to a same overlay, and they will be rendered in their part, maybe it will avoid the exception. Our IsoLines never processes the so large grid data, I worry maybe there are some bugs in the GridIsoLineLayer, so can you provide your grid data(or a download link) for me to reproduce the issue ?As your last question of “Why does the refresh require so much memory when the GridFeatureLayer has already been created?”, when refreshing, the GridIsoLineLayer will use data from GridFeatureLayer to get IsoLines, these vast lines(when using large grid) are stored in memory before drawing in the form, so the memory will increase quickly. 
  
 Regards, 
  
 Gary

Gary


Thanks for the response and the suggestion.  I have tried several times and I am unable to upload the gridfile that gives us the OutOfMemory exception. The file is over 8 MB and I think it is too large to upload on the forum. 


I think your suggestion of splitting the large data file in multiple section and building separate layers for the sections and then adding them to the same overlay is a good solution.  I am not sure when I will have a chance to try this out as we are now past the development stage for our current release.  I will try to remember to return back to this post when we have a chance to try this out.


Thanks again for your suggestion.


Richard 


 



Hi Richard, 
  
 Thanks for your feedback, please let us know it help or not after you try that out. 
  
 Regards, 
 Edgar