ThinkGeo.com    |     Documentation    |     Premium Support

Max feature in a InMemoryFeatureLayer / InMemoryFeatureLayer or MssqlFeatureLayer

Hi, 





Currently, the datas are recorded in sql server 2008.


So I use a MssqlFeatureLayer to show the feature in my software.



But I wonder if it is not relevant to use a InMemoryFeatureLayer layer instead of a layer MssqlFeatureLayer …
What is the limit of features in a InMemoryFeatureLayer ?
What are the criteria for using a MssqlFeatureLayer rather than a InMemoryFeatureLayer ?



Benefits to using MssQlFeatureLayer  : … ?
1) Using spatial index of the sql table
2) With 100000 features, navigation is fluid
The disadvantages : 
1) If we want to do a thematic analysis on a data which is not in the table sql, we have to use Fetch_Column (may be slow application ?)






Benefits to using InMemoryFeatureLayer
1) We can add column and no need to use Fetch_column for a thematic analysis …



The disadvantages:
1) May be slower than a MssqlFeatureLayer ?
2) Spatial index less efficient than a spatial index in MssqlServer ?



Thanks a lot for your help.



Regards.



Stéphanie





Hi Steph, 
  
 To use a InMemoryFeatureLayer without limit, InMemoryFeatureLayer save everything in memory so it need enough memory space. If the data is too big and you want did some sql search, for example, get some features contains special column value, the InMemoryFeatureLayer can only loop all features, MssQlFeatureLayer should works better here. 
  
 For disadvantages about InMemoryFeatureLayer, I think when render shapes, it should faster than MssqlFeatureLayer if the features have been added into it, because InMemoryFeatureLayer read data from memory but MssqlFeatureLayer read data from sql connection. For spatial index, InMemoryFeatureLayer need recreate the index anytime the contained data changed, but efficient shouldn’t less than index of MssqlFeatureLayer. 
  
 Any question please let me know. 
  
 Regards, 
  
 Don

Hi Don,  
  
 Thanks for your answer. 
 Just one more thing, when you say ‘if the data is too big’, from how many features can be considered that the data are too big ? 
 500 features; 1000 features? or more, or less ? 
  
 In fact, I Have a sql table with a lot of features. But I need to display 150 features from this table. 
 Currently, I use a MssqlFeatureLayer with the whereClause of MssqlFeatureLAyer.  
  
 And I raised the question of the appropriateness of doing this and if it is not best to manage these features to be displayed in a layer InMemoryFeatureLayer … ? 
  
 Thanks again for your help. 
  
 Regards. 
  
 Stéphanie. 


Hi Steph, 
  
 I meant the limit related your hardward, your memory and possible OS limit. We haven’t set limit for this layer. 
  
 Please don’t worry about 150 features in InMemoryFeatureLayer, it’s not problem at all. 
  
 Regards, 
  
 Don

Hi Don, 



Thanks for your help.
I have few more questions about InMemoryFeatureLayer.
With a MssqlFeatureLayer, only features in the bounding box of the current Map have been loaded … I think ?
When I say “loaded”, I want to say the intersection between the features of a MssqlFeatureLayer and the Bounding box of the current extend.



Is it the same thing with the InMemoryFeatureLayer ?



Just a precision about our organization of the layers and overlays.
There are 5 Overlays in the map control : 



Overlay 1 for the raster




Overlay 2 which has 6 layers (In this overlay, it’s “dynamic” layers which means the user can add / delete / edit features)


Layer 1 has about 5000 Features (currently it’s a MssqlFeatureLayer but we want to change to a InMemoryFeatureLayer)
Layer 2 has about 12500 Features (currently it’s a MssqlFeatureLayer but we want to change to a InMemoryFeatureLayer)
Layer 3 has about 50000 Features (currently it’s a MssqlFeatureLayer but we want to change to a InMemoryFeatureLayer)
Layer 4 has about 200000 to 500000 Features (currently it’s a MssqlFeatureLayer and stay a MsssqlFeatureLayer)
Layer 5 has about 200000 to 500000 Features (currently it’s a MssqlFeatureLayer and stay a MsssqlFeatureLayer)
Layer 6 has about 200000 to 500000 Features (currently it’s a MssqlFeatureLayer and stay a MsssqlFeatureLayer)



Overlay 3 which has 2 Layers (In this overlay, it’s “static” layers which means the user can not add / delete / edit features)
Layer 1 has about 100 features (currently it’s a MssqlFeatureLayer and stay a MsssqlFeatureLayer)
Layer 2 has about 33000 features (currently it’s a MssqlFeatureLayer and stay a MsssqlFeatureLayer)



Overlay 4 which has 2 layers (user can add / edit / delete features)
Layer 1 has about 1 to 5 features (currently it’s a InMemoryfeatureLayer and stay a InMemoryfeatureLayer )
Layer 2 has about 1 to 2000 features (currently it’s a InMemoryfeatureLayer and stay a InMemoryfeatureLayer )



Overlay 5 which is a PrinterOverlay.






Do you think the changes you wish to make can have an impact on the performance of the application ?
The memory is between 4 go and 8 go and OS ==> Windows 7 and few XP.



Thanks again for your help.



Regards.



Stéphanie.




Hi Steph,



In attached sample code we tried to stimulate your situation, and we found that the drawing time for inmoryFeatureLayers is 4323.4587ms(win8 I7-3770).



Hope it could be helpful.



Best Regards



Summer

OurTestCode.txt (6.54 KB)

Hi Summer,  
  
 Thanks. 
  
 Regards. 
  
 Steph.

Hi Steph, 
  
 Any questions do not hesitate to let us know. 
  
 Thanks, 
 Johnny