ThinkGeo.com    |     Documentation    |     Premium Support

Improve the speed!

 Hi, 


I'm trying to improve the speed of working with WPF control. I understood that if we use tiling and cache, the speed will be increase, especially for the big files. 


I want to know, is any other way to improve the speed/performance?


and should I change the CacheId any time I add layer or restart the application or ... ? / Or I simply can hardcode the CacheId and always use same CacheId? 


Regards,

Ben



Hi Ben, 
  
 Tiling and cache are perfect group to optimize the performance when drawing big files. As far as I know, in tiling mode, some features will be drawn multiple times and that’s the main reason why it’s slower than drawing one single big tile; although single tile is less responsive than multiple tiles.  
  
 You can change the cache id dynamically without restart the application; once the cache id is changed, we’ll load the cache files from a new directory; if the cache file cannot be found, we’ll generate a new tile for you. 
  
 On the other hand, rather than drawing a big file, I’d like to split the big shape file to several smaller files; Set different new files in a specific zoom level. I’m sure it will be faster. Then we can cache the layers which are stable and draws the dynamic layers every time. Hope it makes sense. 
  
 We are planning to optimize the performance for all of our products, but it’s not started yet. Just let you know this. Recently, I don’t have other options for you. Sorry for the inconvenience. 
  
 Thanks, 
 Howard 


Many thanks for your answers. 



1-I want to know, should I change the CacheId for different files or i can use constant name for all of them? 

2- is there a way to cache the different zoom level before the user go to that zoom level, I mean that as soon as user open a shape file, can we start to create cache for different zoom level using different threads? 

3-is it possible to use thread on tile loading time?



Thanks, 

Ben



Hi Ben, 
  
 For your first question, you can set different cache id for different files. Just in case my misunderstanding, I’ll explain how the cache saves. You know the FileBitmapTileCache has two properties: CacheDirectory and CacheId; then the file cache name is [CacheDirectory]/[CacheId]/[CurrentScale]/[Row]/[Column].png etc. If you didn’t set the cache id, it will be a Guid. So if you know how to save the cache files, you might know how to arrange the cache id. 
  
 As my understanding, if you use a constant name as cache id for different files, the cache files must be conflicted when you using it. 
  
 For you second question, I think it’s a good idea; but we don’t have any API’s to do it now. But let’s estimate how much disk size do we need for caching all levels? For every level, you will save Map.Pow(2, 2*n) tiles, while most of the tiles are useless for your needs; although we can have some algorism to optimize it. 
  
 We have MapSuiteTileMatrix class which can help you generate the tiles information you need. You can pre-cache the tiles by your logic. You know we cannot spend much time on making samples for every user here, just have a try and let me know if you have any questions. Sorry for the inconvenience. 
  
 Hope it makes sense. 
  
 Thanks, 
 Howard

thanks for your great help.

Hi Ben,



Here is a related post for pre-generating cache files; I think it might give you some ideas:

gis.thinkgeo.com/Support/Dis...fault.aspx



Just let me know if you have more queries.



Thanks,

Howard