ThinkGeo.com    |     Documentation    |     Premium Support

Out of memory's problem with rasters

 Hi,


 I have a problem out of memory when I Zoom + or zoom .


I'm using a multigeorasterlayer for the rasters.I have more than 300 rasters.I put a lowerscale and a upperscale for the multirasterLayer.


 


Step 1  : I zoom but no rasters are displayed because the zoom is under the lowerscale.


The zone memory of my application is  238696 K (processus windows)


Step 2  : I did a zoom in and rasters are displayed and the memory is 430 780 k


Step3 : I zoom in ,zoom out  and the memory of my application is higher and higher (747564 k)


Step 4  : etc .... and the memory can reach more than 1 178 000k


 


 I did differents tests with the cache  :


Test1 : 


 


MultiGeoRasterLayerTIF rasterTIFLayer = new MultiGeoRasterLayerTIF(cc.NomCheminRaster);


rasterTIFLayer.LowerScale = cc.LowerScale;


rasterTIFLayer.UpperScale = cc.UpperScale;


 if (nmOverlay.Contains(cc.NomOverlay) == false)


{


 nmOverlay.Add(cc.NomOverlay);


LayerOverlay ovLy = new LayerOverlay();


 ovLy.Name = cc.NomOverlay;


 ovLy.Layers.Add(cc.NomLayer, rasterTIFLayer);


  ovLy.TileCache = new FileBitmapTileCache(@"..\..\App_Data\layerOverlayDrawWithCacheRaster\\", "ManualCache");


Bitmap nativeImageRaster = new Bitmap((int)MapActif.ActualWidth, (int)MapActif.ActualHeight);


GdiPlusGeoCanvas geoCanvasRaster = new GdiPlusGeoCanvas();


 geoCanvasRaster.BeginDrawing(nativeImageRaster, MapActif.CurrentExtent, MapActif.MapUnit);


 ovLy.Draw(geoCanvasRaster);


geoCanvasRaster.EndDrawing();


ovLy.TileCache = null;


lstOverlay.Add(cc.NomOverlay + "_KEY", ovLy);


}


Test2 : 


 


MultiGeoRasterLayerECW rasterECWLayer = new MultiGeoRasterLayerECW(cc.NomCheminRaster);


rasterECWLayer.LowerScale = cc.LowerScale;


rasterECWLayer.UpperScale = cc.UpperScale;


 if (nmOverlay.Contains(cc.NomOverlay) == false)


{


nmOverlay.Add(cc.NomOverlay);


 LayerOverlay ovLy = new LayerOverlay();


ovLy.Name = cc.NomOverlay;


ovLy.Layers.Add(cc.NomLayer, rasterECWLayer);


 ovLy.TileCache = new FileBitmapTileCache(@"..\..\App_Data\layerOverlayDrawWithCacheRaster\\", "ManualCache");


ovLy.RenderMode = RenderMode.GdiPlus;


ovLy.TileType = TileType.HybridTile;


lstOverlay.Add(cc.NomOverlay + "_KEY", ovLy);


}


 




But the memory is still higher and higher.


I did the test with no rasters, I zoom in and I zoom out and in this case, the memory is acceptable , about 250000K 


So the problem comes from the display / loading of the rasters. There is no free memory zone.


How can I resolve my problem ?


I think I don't use very well the cache but i'm not sure ... ?


Thank you  for your help.


 Regards


 Steph.



 


 




 




Hi, 


Just few more information.


We use dll 6.0.0.


I joined the code of MultigeorasterLayerEcw.


Thanks again for your help.


Regards.


Steph.



001_MultiGeoRasterLayerECW.cs (11 KB)

Hi Steph, 
  
 The cs file could not be downloaded from the post cause the security restriction, please change the extension to txt or add it to an archive and upload it. BTW, could you please attach the MultigeorasterLayerTIF too? 
  
 Thanks, 
 Edgar

 Hi Edgar, 


Sorry.


I donwloaded the 2 files. In fact, they are almost the same files except on is for the ecw raster and the other is for tif raster.


Thanks for your help.


Regards.


Steph.



MultiGeoRasterLayerECW.txt (11 KB)
MultiGeoRasterLayerTIF.txt (8.8 KB)

Steph,


Thanks for your code, but I still cannot recreate the issue, in oroder to get it built successfully, I modified some code, here is my test code,



            MultiGeoRasterLayerTIF rasterTIFLayer = new MultiGeoRasterLayerTIF(@"Desktop\New Text Document.txt");
            rasterTIFLayer.LowerScale = double.MinValue;
            rasterTIFLayer.UpperScale = double.MaxValue;

            LayerOverlay ovLy = new LayerOverlay();
            ovLy.Name = "NomOverlay";
            ovLy.Layers.Add("NomLayer", rasterTIFLayer);
            ovLy.TileCache = new FileBitmapTileCache(@"..\..\App_Data\layerOverlayDrawWithCacheRaster\\", "ManualCache");
            Map1.Overlays.Add("NomOverlay" + "_KEY", ovLy);

            Map1.Refresh();

the txt file contains 1 world.tif file's information, I zoom in and out for a while, the memory went up and fell down later, so maybe I only have one tif file and cannot get the result like yours, so is it possible for you to send some raster files e.g. 20MB to forumsupport@thinkgeo.com for us to test? Maybe we can recreate the issue by your files, notice we also need the list file which as a parameter(rasterRefrencePathFileName) of class MultiGeoRasterLayerTIF's constructor that mapping with the raster files you attached.


Thanks,


Edgar



Hi Edgar,  
  
 Thank you for your answer. 
 I did more tests about this and yes with the raster Tif, there is no problem the memory went up and fell down later. 
 Tomorrow, i’ll do with more rasters tif but I think it’s OK. 
 The problem comes specifically with the ecw raster, the memory went up and no fell down. 
 I can send to the suuport the files .ecw with the list file. 
 How it works ?  
 I’ll send directly to the support and explain my problem with a reference to this post ? 
  
 Thank you again. 
  
 Regards. 
  
 Steph.

Steph, 
  
 Yes, you can send them to forumsupport@thinkgeo.com, in the letter, you just need to point to this post. 
  
 Regards, 
 Edgar

Hi Steph,


I used the following code but got nothing on the map,and the pictures in cache folder are blank too, could you please send us the *.eww files also?



            Map1.MapUnit = GeographyUnit.Meter;
            Map1.CurrentExtent = new RectangleShape(464999.75, 6640000.25, 6630000.25, 469999.75);

            MultiGeoRasterLayerECW rasterTIFLayer = new MultiGeoRasterLayerECW(@"Desktop\New Text Document.txt");
            rasterTIFLayer.LowerScale = double.MinValue;
            rasterTIFLayer.UpperScale = double.MaxValue;

            LayerOverlay ovLy = new LayerOverlay();
            ovLy.Name = "NomOverlay";
            ovLy.Layers.Add("NomLayer", rasterTIFLayer);
            ovLy.TileCache = new FileBitmapTileCache(@"..\..\App_Data\layerOverlayDrawWithCacheRaster\\", "ManualCache");
            Map1.Overlays.Add("NomOverlay" + "_KEY", ovLy);

            Map1.Refresh();

Regards,


Edgar



 Hi Edgar, 


I joined file shp/dbf of french department (equal states).


I did a test and that works, i can see the rasters ecw. (ie code below)


I also joined a screen shot of french map where you should see the rasters.


Thanks a lot.


Regards.


Steph


 



  ShapeFileFeatureLayer sh = new ShapeFileFeatureLayer(@"C:\Steph_WPFCarto\\DEPARTEMENT.SHP");


            sh.RequireIndex = false;          


            sh.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Orange), 3);


            sh.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


            sh.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("NOM_DEPT", "Arial", 10, DrawingFontStyles.Bold, GeoColor.SimpleColors.Red);


            sh.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.PointPlacement = PointPlacement.Center;


            sh.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.OverlappingRule = LabelOverlappingRule.NoOverlapping;


            sh.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.DuplicateRule = LabelDuplicateRule.NoDuplicateLabels;


 


.....  ovLy.Layers.Add("Dpt", sh );


 



GEOFLADept_FR_Corse_AV_L93.zip (276 KB)

Thanks Steph, 
  
 I think the reason I can’t see the image is that I set the extent in a wrong way, when I set to (464999.75, 6640000.25, , 469999.75,6630000.25), I can see it. The memory leak bug has been confirmed, I’ll let you know when the development team fixed this. 
  
 Regards, 
 Edgar

Hi Edgar, 
  
 Thanks. 
  
 Regards. 
  
 Steph.

Hi Edgar,  
  
 When do you think that this problem (memory leak bug) will be solved ? few days …or more ? 
  
 Thanks. 
  
 Regards. 
  
 Stéph.

Steph, 
  
 I’m not sure, as we are using the dlls from Erdas to show the RasterFiles, I downloaded a Erviewer from Erdas to test with your files, the memory goes up to 650MB and was stable at that level, if I set the platform to x86 for our sample,  the memory was stable at 650MB too, but it will be out of memory if the platform is x64. So this might be a bug in Erdas, we are contacting with them to get more information, any progress we will let you know. 
  
 Regards, 
 Edgar

Hi Edgar,  
  
 I tested on a plateform x86 and we have the same pb.  I tested with  approximately100 rasters. 
 Thanks. 
  
 Regards. 
 Steph.

Hi Edgar,  
  
 About this problem, had you some news from Erdas or found the problem ? 
  
 Thanks a lot. 
  
 Regards. 
  
 Steph.

Steph, 
  
 We are still working on this, it seems that it’s a little complicate to solve this problem, any news I’ll let you know. 
  
 Regards, 
 Edgar

Hi Edgar,  
  
 About this problem, did you solve this problem ? 
  
 Thanks. 
  
 Regards. 
  
 Steph.

Hello Steph, 
  
 Sorry for the inconvenience, this is a complex problem and we are still working on it, we will post any news here. 
  
 Regards, 
  
 Gary

Hi Gary,  
  
 Did you solve this problem with the new version of map suite 7 ? 
  
 Thanks. 
  
 Regards. 
  
 Steph.

Hi Steph, 
  
 Sorry for the waiting. After a deep investigation on ecw dependencies’ assemblies on ERDAS web site ( erdas.com ), I found that the ecw dependencies’ assemblies have been updated version 4.3.0. I downloaded it and test with ecw sample data, seem like it has improved memory leak problem. A little more test is needed, if everything goes well, it will be released soon. 
  
 Sorry again 
  
 Summer