ThinkGeo.com    |     Documentation    |     Premium Support

Label Performance

Hi, I am trying to load a large shapefile to represent street data (330MB).  If labels are hidden then the map renders the shapefile without any problem and is amazingly fast.  But when I try to show labels the performance slows to a crawl.  (It can go from taking less than two seconds without labels to taking over 30 seconds with labels.)  It takes a long time even if zooming in close (scale <= 5000).



I have generated the index files for the shapefile and set the following properties on the applied TextStyle in an attempt to reduce the overhead of computing label location:

BestPlacement=False

DuplicateRule=UnlimitedDuplicateLabels

OverlappingRule=AllowOverlapping



But unfortunately nothing seems to help.  Can you tell me the best configuration for maximum label placement performance?  Also can you tell me if there are any other things that can cause such a slowdown (maybe something with the associated DBF file)?



Thanks for your help!

Hi Nick, 
  
 General we can set these properties for label, they will make the label looks better: 
  
 .BestPlacement = true; 
 .SuppressPartialLabels = true; 
 .DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels; 
 .GridSize = 40; 
  
 I think maybe your layer have too many labels and is set as allow overlap, so all of them rendered in current extent, that reduce the speed. 
  
 Please try the change and let me know whether that fix your issue. 
  
 If the speed still so slow, could you please show me your label render code so that I can help you for detail? 
  
 Regards, 
  
 Don

Thanks for the quick response!  I tried the configuration you supplied but unfortunately it didn’t help.  My routine that creates the TextStyle objects creates an object with this state for the shapefile in question (I can send code, but this is the end result of the routine, I verified using the debugger):



TextColumnName="field name"

TextSolidBrush= New GeoSolidBrush(…)

Font = new GeoFont(…) //<–font size is 11

TextLineSegmentRatio = 4

Mask = Null

BestPlacement=True

SuppressPartialLabels=True

DuplicateRule = UnlimitedDuplicateLabels

OverlappingRule = AllowOverlapping

GridSize=40



All other properties of the TextStyle object are left as their default values.  I will see about loading the layer up in a stand alone test project so that I can send code.



I create one TextStyle object for each ZoomLevel of the layer if that makes a difference.  And again, if i turn labels off (by setting TextColumnName to null) then the shapefile draws very fast.  Thanks for your help!

So I loaded this layer up in a test project and everything works fast, even with the same label settings. Here are the differences between the test project and the project where I’m having slow label drawing. Will any of these difference impact the performance? 
  
 *Problem project uses projection to project shapefile into decimal degrees, test project leaves it in its native coordinate system. 
 *Problem project sets the TextStyle on each ZoomLevel of the layer, but test project only sets it on ZoomLevel01 and tells it to apply until ZoomLevel20. 
 *Problem project’s map uses a custom ZoomLevelSet with eight zoom levels (the largest scale is 144186), the test project’s map uses the default 20 level set. 
  
 Thanks again for your help! 


Hi Nick,



I think the 3 items shouldn’t produce the problem. For test that I found a big 900913 data which contains 328mb .shp data and 210mb .dbf data.



I build a simple sample follow your 3 differents.



1. Convert to decimal degree
2. Set text style for each ZoomLevel
3. Add custom ZoomLevelSet with 8 levels, lagest is 144186



But the speed looks the same shows label or not.



Could you test my project with your data and let me know the result? And if you modify your project succeed recreate this issue please let me know.



For now I haven’t other idea about how this happen, but if I get any idea about it I will reply this post.



Regards,



Don

Post11459.zip (9.63 KB)

Thanks for the test project.  After much effort I found the problem was with the references to the ThinkGeo assemblies.  I dont know what the problem was, but when i replaced them with ones from the install folder (which they should have been in the first place) everything worked fine.  I dont know what was wrong with the files.  The version numbers and size were identical.  Oh well, sometimes Visual Studio does some weird caching of files.  Thanks for all your help!

Hi Nick, 
  
 I am glad to hear that you fixed this problem. 
  
 That’s strange thing the speed related with dll location. I guess maybe that’s becasue you haven’t copy all dlls when you reference, and when our map control need some special dll it takes time to search in system folder, but it hadn’t been proved. 
  
 Any question please feel free to let us know. 
  
 Regards, 
  
 Don