# Performance tuning with large number of shape layers

**URL:** <https://community.thinkgeo.com/t/performance-tuning-with-large-number-of-shape-layers/2486>\
**Category:** WinForms\
**Created:** [December 4, 2014, 7:18pm UTC](https://community.thinkgeo.com/t/performance-tuning-with-large-number-of-shape-layers/2486 "2014-12-04T19:18:09Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Russ](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/r/e36b37/32.png) [@Russ](https://community.thinkgeo.com/u/Russ)\
**Post date:** [December 4, 2014, 7:18pm UTC](https://community.thinkgeo.com/t/performance-tuning-with-large-number-of-shape-layers/2486/1 "2014-12-04T19:18:09Z")

</div>

The&nbsp;prototype&nbsp;I’m&nbsp;working&nbsp;on&nbsp;must&nbsp;be&nbsp;able&nbsp;to&nbsp;deal&nbsp;with&nbsp;a&nbsp;moderately&nbsp;large&nbsp;number&nbsp;of&nbsp;layers&nbsp;(30&nbsp;to&nbsp;100&nbsp;or&nbsp;so),&nbsp;mostly&nbsp;loaded&nbsp;from&nbsp;shape&nbsp;files.&nbsp;&nbsp;Our&nbsp;external&nbsp;data&nbsp;provides&nbsp;for&nbsp;the&nbsp;concept&nbsp;of&nbsp;display&nbsp;thresholds&nbsp;making&nbsp;the&nbsp;related&nbsp;layers&nbsp;visible&nbsp;only&nbsp;within&nbsp;the&nbsp;designated&nbsp;scale&nbsp;range.&nbsp;&nbsp;I&nbsp;won’t&nbsp;know&nbsp;the&nbsp;final&nbsp;full&nbsp;extent&nbsp;until&nbsp;after&nbsp;all&nbsp;shape&nbsp;files&nbsp;(and&nbsp;others,&nbsp;but&nbsp;mainly&nbsp;the&nbsp;shape&nbsp;files)&nbsp;are&nbsp;loaded.&nbsp;&nbsp;After&nbsp;everything&nbsp;is&nbsp;loaded,&nbsp;I&nbsp;take&nbsp;the&nbsp;full&nbsp;extent&nbsp;and&nbsp;reset&nbsp;the&nbsp;20&nbsp;default&nbsp;zoom&nbsp;levels&nbsp;so&nbsp;that&nbsp;they&nbsp;are&nbsp;appropriate&nbsp;for&nbsp;the&nbsp;desired&nbsp;experience.&nbsp;&nbsp;As&nbsp;I’m&nbsp;loading&nbsp;them,&nbsp;I&nbsp;create&nbsp;the&nbsp;various&nbsp;styles,&nbsp;and&nbsp;as&nbsp;demonstrated&nbsp;in&nbsp;the&nbsp;samples,&nbsp;they&nbsp;are&nbsp;bound&nbsp;to&nbsp;zoom&nbsp;level&nbsp;01&nbsp;and&nbsp;then&nbsp;ApplyUntilZoomLevel&nbsp;through&nbsp;20.&nbsp;&nbsp;As&nbsp;scale&nbsp;changes,&nbsp;I&nbsp;set&nbsp;IsVisible&nbsp;on&nbsp;the&nbsp;layers&nbsp;based&nbsp;on&nbsp;our&nbsp;thresholds.  
  
  
  
Unfortunately,&nbsp;particularly&nbsp;with&nbsp;the&nbsp;PointStyle&nbsp;layers&nbsp;having&nbsp;lots&nbsp;of&nbsp;points,&nbsp;performance&nbsp;quickly&nbsp;becomes&nbsp;unacceptable&nbsp;when&nbsp;zooming/panning&nbsp;(I&nbsp;do&nbsp;have&nbsp;a&nbsp;memory&nbsp;cache&nbsp;attached).&nbsp;&nbsp;I’ve&nbsp;found&nbsp;that&nbsp;if&nbsp;I&nbsp;limit&nbsp;the&nbsp;point&nbsp;styles&nbsp;to&nbsp;avoid&nbsp;the&nbsp;most&nbsp;zoomed&nbsp;out&nbsp;levels,&nbsp;those&nbsp;levels&nbsp;perform&nbsp;MUCH&nbsp;better.&nbsp;&nbsp;So&nbsp;I’m&nbsp;thinking&nbsp;I&nbsp;need&nbsp;to&nbsp;rethink&nbsp;how&nbsp;I&nbsp;load&nbsp;the&nbsp;styles.&nbsp;&nbsp;Perhaps&nbsp;a&nbsp;better&nbsp;way&nbsp;would&nbsp;be&nbsp;waiting&nbsp;until&nbsp;after&nbsp;all&nbsp;layers&nbsp;are&nbsp;loaded&nbsp;to&nbsp;determine&nbsp;the&nbsp;full&nbsp;extent,&nbsp;setting&nbsp;the&nbsp;zoom&nbsp;level&nbsp;scales&nbsp;as&nbsp;appropriate,&nbsp;and&nbsp;only&nbsp;THEN&nbsp;go&nbsp;back&nbsp;to&nbsp;set&nbsp;the&nbsp;styles&nbsp;only&nbsp;on&nbsp;the&nbsp;levels&nbsp;where&nbsp;the&nbsp;threshold&nbsp;allows&nbsp;them&nbsp;to&nbsp;be&nbsp;visible.&nbsp;&nbsp;That&nbsp;would&nbsp;eliminate&nbsp;the&nbsp;code&nbsp;looping&nbsp;through&nbsp;to&nbsp;show/hide&nbsp;layers&nbsp;on&nbsp;each&nbsp;scale&nbsp;change&nbsp;(just&nbsp;eliminating&nbsp;this&nbsp;alone&nbsp;didn’t&nbsp;improve&nbsp;things&nbsp;noticeably),&nbsp;and&nbsp;also&nbsp;provide&nbsp;the&nbsp;benefits&nbsp;shown&nbsp;by&nbsp;hard&nbsp;coding&nbsp;the&nbsp;avoidance&nbsp;of&nbsp;setting&nbsp;point&nbsp;styles&nbsp;on&nbsp;the&nbsp;lower&nbsp;(numeric)&nbsp;zoom&nbsp;levels.  
  
  
  
So,&nbsp;is&nbsp;that&nbsp;the&nbsp;right&nbsp;path?&nbsp;&nbsp;Or&nbsp;is&nbsp;there&nbsp;something&nbsp;else&nbsp;I&nbsp;should&nbsp;be&nbsp;looking&nbsp;at&nbsp;to&nbsp;improve&nbsp;zoom/pan&nbsp;performance?&nbsp;&nbsp;The&nbsp;cache&nbsp;makes&nbsp;it&nbsp;really&nbsp;fast&nbsp;once&nbsp;you&nbsp;have&nbsp;already&nbsp;“been&nbsp;there”.&nbsp;&nbsp;It’s&nbsp;the&nbsp;initial&nbsp;pan/zoom&nbsp;that&nbsp;I&nbsp;need&nbsp;to&nbsp;improve&nbsp;in&nbsp;a&nbsp;very&nbsp;substantial&nbsp;way.&nbsp;

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [December 5, 2014, 3:25am UTC](https://community.thinkgeo.com/t/performance-tuning-with-large-number-of-shape-layers/2486/2 "2014-12-05T03:25:33Z")

</div>

Hi&nbsp;Russ,&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;am&nbsp;sorry&nbsp;I&nbsp;have&nbsp;a&nbsp;little&nbsp;confused&nbsp;about&nbsp;your&nbsp;section&nbsp;two,&nbsp;about&nbsp;how&nbsp;you&nbsp;think&nbsp;to&nbsp;handle&nbsp;the&nbsp;slow&nbsp;point&nbsp;styles.&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;In&nbsp;fact&nbsp;we&nbsp;have&nbsp;some&nbsp;experience&nbsp;about&nbsp;how&nbsp;to&nbsp;improve&nbsp;render&nbsp;speed,&nbsp;I&nbsp;want&nbsp;to&nbsp;share&nbsp;that&nbsp;to&nbsp;you&nbsp;and&nbsp;wish&nbsp;that’s&nbsp;helpful.&nbsp;  
&nbsp;&nbsp;  
&nbsp;1.&nbsp;If&nbsp;the&nbsp;cache&nbsp;is&nbsp;work&nbsp;for&nbsp;you,&nbsp;I&nbsp;think&nbsp;you&nbsp;can&nbsp;try&nbsp;to&nbsp;use&nbsp;our&nbsp;cache&nbsp;generator&nbsp;to&nbsp;pregenerate&nbsp;cache.&nbsp;[thinkgeo.com/forums/MapSuite/tabid/143/aft/10446/Default.aspx](http://thinkgeo.com/forums/MapSuite/tabid/143/aft/10446/Default.aspx)&nbsp;  
&nbsp;&nbsp;  
&nbsp;2.&nbsp;Generally&nbsp;if&nbsp;one&nbsp;layer&nbsp;shows&nbsp;too&nbsp;many&nbsp;shapes&nbsp;in&nbsp;one&nbsp;zoomlevel&nbsp;and&nbsp;make&nbsp;it&nbsp;very&nbsp;slow,&nbsp;we&nbsp;need&nbsp;optimize&nbsp;that.&nbsp;If&nbsp;it’s&nbsp;a&nbsp;point&nbsp;shape&nbsp;you&nbsp;can&nbsp;do&nbsp;something&nbsp;like&nbsp;this:&nbsp;  
&nbsp;a.&nbsp;Use&nbsp;ClusterPointStyle&nbsp;in&nbsp;high&nbsp;level&nbsp;and&nbsp;when&nbsp;zoom&nbsp;in,&nbsp;use&nbsp;original&nbsp;point&nbsp;style.&nbsp;  
&nbsp;b.&nbsp;Research&nbsp;the&nbsp;data,&nbsp;build&nbsp;index&nbsp;for&nbsp;parts&nbsp;data&nbsp;by&nbsp;type,&nbsp;render&nbsp;them&nbsp;in&nbsp;different&nbsp;zoomlevel.&nbsp;For&nbsp;example,&nbsp;if&nbsp;we&nbsp;have&nbsp;a&nbsp;streets&nbsp;data,&nbsp;we&nbsp;can&nbsp;group&nbsp;them&nbsp;by&nbsp;highway&nbsp;and&nbsp;local&nbsp;road,&nbsp;then&nbsp;build&nbsp;different&nbsp;index&nbsp;files&nbsp;for&nbsp;one&nbsp;shape,&nbsp;when&nbsp;we&nbsp;are&nbsp;in&nbsp;high&nbsp;zoomlevel,&nbsp;we&nbsp;just&nbsp;render&nbsp;highway,&nbsp;after&nbsp;we&nbsp;zoom&nbsp;in&nbsp;we&nbsp;render&nbsp;all&nbsp;the&nbsp;roads,&nbsp;this&nbsp;can&nbsp;make&nbsp;sure&nbsp;when&nbsp;we&nbsp;are&nbsp;in&nbsp;one&nbsp;specified&nbsp;zoomlevel,&nbsp;current&nbsp;extent&nbsp;won’t&nbsp;contains&nbsp;too&nbsp;many&nbsp;data&nbsp;and&nbsp;the&nbsp;speed&nbsp;is&nbsp;acceptable.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Wish&nbsp;that’s&nbsp;helpful&nbsp;for&nbsp;your&nbsp;scenario.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don

---

<div class="post-metadata">

**Author:** ![Russ](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/r/e36b37/32.png) [@Russ](https://community.thinkgeo.com/u/Russ)\
**Post date:** [December 8, 2014, 5:44pm UTC](https://community.thinkgeo.com/t/performance-tuning-with-large-number-of-shape-layers/2486/3 "2014-12-08T17:44:07Z")

</div>

Thank&nbsp;you.&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;The&nbsp;way&nbsp;our&nbsp;shape&nbsp;data&nbsp;is&nbsp;organized,&nbsp;your&nbsp;suggestions&nbsp;under&nbsp;#2&nbsp;do&nbsp;not&nbsp;seem&nbsp;to&nbsp;apply.&nbsp;&nbsp;Basically,&nbsp;each&nbsp;shapefile/layer&nbsp;represents&nbsp;a&nbsp;different&nbsp;type&nbsp;of&nbsp;“thing”.&nbsp;&nbsp;If&nbsp;the&nbsp;user&nbsp;configures&nbsp;our&nbsp;metadata&nbsp;to&nbsp;indicate&nbsp;that&nbsp;it&nbsp;is&nbsp;visible&nbsp;for&nbsp;a&nbsp;scale&nbsp;range,&nbsp;then&nbsp;it&nbsp;is&nbsp;always&nbsp;the&nbsp;same&nbsp;for&nbsp;that&nbsp;range,&nbsp;and&nbsp;not&nbsp;visible&nbsp;when&nbsp;scale&nbsp;is&nbsp;outside&nbsp;the&nbsp;indicated&nbsp;range.&nbsp;&nbsp;So&nbsp;ClusterPointStyle&nbsp;and&nbsp;multiple&nbsp;index&nbsp;doesn’t&nbsp;really&nbsp;help.&nbsp;  
&nbsp;&nbsp;  
&nbsp;I’ve&nbsp;looked&nbsp;into&nbsp;#1&nbsp;a&nbsp;bit&nbsp;further.&nbsp;&nbsp;Our&nbsp;shape&nbsp;files&nbsp;are&nbsp;different&nbsp;for&nbsp;each&nbsp;customer,&nbsp;and&nbsp;may&nbsp;be&nbsp;updated&nbsp;over&nbsp;time,&nbsp;so&nbsp;we&nbsp;would&nbsp;have&nbsp;to&nbsp;be&nbsp;generate&nbsp;the&nbsp;cache&nbsp;dynamically&nbsp;as&nbsp;need&nbsp;was&nbsp;determined.&nbsp;&nbsp;I&nbsp;downloaded&nbsp;the&nbsp;cache&nbsp;generator&nbsp;sample,&nbsp;looked&nbsp;at&nbsp;how&nbsp;it&nbsp;works,&nbsp;and&nbsp;tried&nbsp;to&nbsp;implement&nbsp;a&nbsp;dynamic&nbsp;generation&nbsp;in&nbsp;our&nbsp;prototype.&nbsp;&nbsp;Basically,&nbsp;if&nbsp;the&nbsp;cache&nbsp;folder&nbsp;is&nbsp;empty&nbsp;(or&nbsp;out&nbsp;of&nbsp;date),&nbsp;run&nbsp;the&nbsp;generate&nbsp;for&nbsp;our&nbsp;layers.&nbsp;&nbsp;But&nbsp;with&nbsp;20&nbsp;zoom&nbsp;levels,&nbsp;that&nbsp;would&nbsp;be&nbsp;a&nbsp;LOT&nbsp;of&nbsp;tiles&nbsp;to&nbsp;generate.&nbsp;&nbsp;Still,&nbsp;I&nbsp;tried&nbsp;using&nbsp;only&nbsp;the&nbsp;first&nbsp;10&nbsp;level&nbsp;scales.&nbsp;&nbsp;This&nbsp;did&nbsp;not&nbsp;produce&nbsp;what&nbsp;I&nbsp;expected.&nbsp;Using&nbsp;scales&nbsp;from&nbsp;219938&nbsp;to&nbsp;12385&nbsp;(10,&nbsp;evenly&nbsp;spaced)&nbsp;and&nbsp;the&nbsp;“full&nbsp;extent”&nbsp;from&nbsp;the&nbsp;map&nbsp;(adjusted&nbsp;to&nbsp;ideal&nbsp;fit&nbsp;after&nbsp;loading&nbsp;the&nbsp;shape&nbsp;files),&nbsp;I&nbsp;got&nbsp;only&nbsp;one&nbsp;folder&nbsp;for&nbsp;164954.239237129,&nbsp;which&nbsp;is&nbsp;our&nbsp;initial&nbsp;view&nbsp;at&nbsp;zoom&nbsp;level&nbsp;2.&nbsp;&nbsp;I&nbsp;suspect&nbsp;that&nbsp;was&nbsp;simply&nbsp;created&nbsp;by&nbsp;the&nbsp;FileBitmapTileCache&nbsp;that&nbsp;was&nbsp;attached&nbsp;to&nbsp;the&nbsp;shape&nbsp;layer&nbsp;overlay&nbsp;(instead&nbsp;of&nbsp;InMemoryBitmapTileCache),&nbsp;and&nbsp;that&nbsp;the&nbsp;cache&nbsp;pre-gen&nbsp;did&nbsp;not&nbsp;actually&nbsp;work.&nbsp;&nbsp;I’ve&nbsp;run&nbsp;out&nbsp;of&nbsp;time&nbsp;for&nbsp;the&nbsp;day,&nbsp;and&nbsp;may&nbsp;fool&nbsp;with&nbsp;this&nbsp;some&nbsp;more&nbsp;tomorrow,&nbsp;but&nbsp;just&nbsp;by&nbsp;running&nbsp;the&nbsp;prototype&nbsp;through&nbsp;zoom/pan,&nbsp;the&nbsp;tremendous&nbsp;number&nbsp;of&nbsp;files&nbsp;generated&nbsp;makes&nbsp;this&nbsp;less&nbsp;than&nbsp;ideal&nbsp;I&nbsp;think.&nbsp;  
&nbsp;&nbsp;  
&nbsp;My&nbsp;other&nbsp;idea&nbsp;also&nbsp;did&nbsp;not&nbsp;pan&nbsp;out.&nbsp;&nbsp;My&nbsp;initial&nbsp;approach&nbsp;was&nbsp;setting&nbsp;styles&nbsp;(based&nbsp;on&nbsp;our&nbsp;product&nbsp;metadata)&nbsp;for&nbsp;each&nbsp;layer&nbsp;across&nbsp;all&nbsp;zoom&nbsp;levels&nbsp;and&nbsp;controlling&nbsp;threshold&nbsp;visibility&nbsp;for&nbsp;each&nbsp;layer&nbsp;explicitly&nbsp;by&nbsp;changing&nbsp;Layer.IsVisible&nbsp;in&nbsp;response&nbsp;to&nbsp;Scale&nbsp;Changed.&nbsp;&nbsp;In&nbsp;another&nbsp;test,&nbsp;I&nbsp;thought&nbsp;I&nbsp;had&nbsp;noticed&nbsp;that&nbsp;when&nbsp;not&nbsp;setting&nbsp;styles&nbsp;for&nbsp;the&nbsp;lower&nbsp;zoom&nbsp;levels&nbsp;(for&nbsp;instance&nbsp;setting&nbsp;style&nbsp;only&nbsp;for&nbsp;ZoomLevel15-20)&nbsp;that&nbsp;the&nbsp;performance&nbsp;improved&nbsp;substantially.&nbsp;&nbsp;So&nbsp;I&nbsp;changed&nbsp;my&nbsp;code&nbsp;that&nbsp;initially&nbsp;loaded&nbsp;to&nbsp;shape&nbsp;files&nbsp;into&nbsp;layers&nbsp;and&nbsp;set&nbsp;styles&nbsp;from&nbsp;01-20&nbsp;as&nbsp;appropriately&nbsp;as&nbsp;I&nbsp;went.&nbsp;&nbsp;Now&nbsp;it&nbsp;is&nbsp;loading&nbsp;all&nbsp;shape&nbsp;files&nbsp;into&nbsp;layers,&nbsp;determining&nbsp;full&nbsp;extent,&nbsp;setting&nbsp;all&nbsp;map&nbsp;zoom&nbsp;levels&nbsp;beginning&nbsp;with&nbsp;full&nbsp;extent&nbsp;and&nbsp;zooming&nbsp;25%&nbsp;per-level.&nbsp;&nbsp;Only&nbsp;after&nbsp;that&nbsp;is&nbsp;done,&nbsp;I&nbsp;look&nbsp;at&nbsp;each&nbsp;layer’s&nbsp;thresholds,&nbsp;map&nbsp;those&nbsp;to&nbsp;the&nbsp;adjusted&nbsp;zoom&nbsp;levels,&nbsp;and&nbsp;set&nbsp;the&nbsp;styles&nbsp;only&nbsp;on&nbsp;zoom&nbsp;levels&nbsp;where&nbsp;needed.&nbsp;&nbsp;Unfortunately&nbsp;this&nbsp;also&nbsp;did&nbsp;not&nbsp;provide&nbsp;any&nbsp;noticeable&nbsp;improvement,&nbsp;though&nbsp;I’ll&nbsp;need&nbsp;to&nbsp;look&nbsp;at&nbsp;it&nbsp;a&nbsp;bit&nbsp;closer&nbsp;to&nbsp;see&nbsp;if&nbsp;it’s&nbsp;working&nbsp;the&nbsp;way&nbsp;I&nbsp;think&nbsp;it&nbsp;is.&nbsp;  
&nbsp;&nbsp;

---

<div class="post-metadata">

**Author:** ![Russ](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/r/e36b37/32.png) [@Russ](https://community.thinkgeo.com/u/Russ)\
**Post date:** [December 9, 2014, 1:10am UTC](https://community.thinkgeo.com/t/performance-tuning-with-large-number-of-shape-layers/2486/4 "2014-12-09T01:10:05Z")

</div>

Another&nbsp;question.&nbsp;&nbsp;If&nbsp;I&nbsp;manipulate&nbsp;the&nbsp;map&nbsp;zoom&nbsp;level&nbsp;sets,&nbsp;how&nbsp;does&nbsp;that&nbsp;relate&nbsp;to&nbsp;layers&nbsp;and&nbsp;their&nbsp;zoom&nbsp;level&nbsp;sets.&nbsp;&nbsp;For&nbsp;instance,&nbsp;I’m&nbsp;adjusting&nbsp;the&nbsp;scale&nbsp;and&nbsp;setting&nbsp;names&nbsp;AFTER&nbsp;the&nbsp;layers&nbsp;are&nbsp;loaded.&nbsp;It’s&nbsp;done&nbsp;that&nbsp;so&nbsp;I&nbsp;can&nbsp;find&nbsp;the&nbsp;total&nbsp;extent&nbsp;to&nbsp;set&nbsp;the&nbsp;zoom&nbsp;levels&nbsp;as&nbsp;desired.&nbsp;&nbsp;I&nbsp;then&nbsp;go&nbsp;back&nbsp;and&nbsp;load&nbsp;each&nbsp;layer’s&nbsp;required&nbsp;styles&nbsp;assigned&nbsp;to&nbsp;a&nbsp;zoom&nbsp;level&nbsp;range&nbsp;indicated&nbsp;by&nbsp;our&nbsp;meta&nbsp;visibility&nbsp;threshold&nbsp;(scale&nbsp;range).&nbsp;&nbsp;But&nbsp;I&nbsp;noticed&nbsp;that&nbsp;the&nbsp;layer’s&nbsp;zoom&nbsp;levels&nbsp;remained&nbsp;the&nbsp;same&nbsp;as&nbsp;original&nbsp;when&nbsp;they&nbsp;were&nbsp;created,&nbsp;even&nbsp;though&nbsp;they&nbsp;were&nbsp;not&nbsp;modified&nbsp;(which&nbsp;I&nbsp;thought&nbsp;meant&nbsp;they&nbsp;would&nbsp;use&nbsp;the&nbsp;common&nbsp;from&nbsp;map?).&nbsp;&nbsp;So&nbsp;now&nbsp;I&nbsp;have&nbsp;to&nbsp;modify&nbsp;each&nbsp;layer’s&nbsp;zoom&nbsp;level&nbsp;set&nbsp;to&nbsp;match&nbsp;the&nbsp;maps&nbsp;zoom&nbsp;level&nbsp;scale&nbsp;while&nbsp;also&nbsp;setting&nbsp;the&nbsp;styles&nbsp;on&nbsp;the&nbsp;zoom&nbsp;levels.&nbsp;&nbsp;Is&nbsp;this&nbsp;how&nbsp;it’s&nbsp;supposed&nbsp;to&nbsp;work,&nbsp;or&nbsp;am&nbsp;I&nbsp;missing&nbsp;something?

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [December 9, 2014, 3:27am UTC](https://community.thinkgeo.com/t/performance-tuning-with-large-number-of-shape-layers/2486/5 "2014-12-09T03:27:42Z")

</div>

Hi&nbsp;Russ,&nbsp;  
&nbsp;&nbsp;  
&nbsp;It&nbsp;looks&nbsp;in&nbsp;most&nbsp;cases&nbsp;your&nbsp;data&nbsp;need&nbsp;to&nbsp;be&nbsp;rendered&nbsp;run-time.&nbsp;For&nbsp;shape&nbsp;files,&nbsp;we&nbsp;won’t&nbsp;load&nbsp;unnecessary&nbsp;data&nbsp;when&nbsp;extent&nbsp;changed&nbsp;because&nbsp;index&nbsp;file,&nbsp;so&nbsp;this&nbsp;part&nbsp;maybe&nbsp;it’s&nbsp;hard&nbsp;to&nbsp;find&nbsp;a&nbsp;way&nbsp;go&nbsp;on&nbsp;improve.&nbsp;Now&nbsp;for&nbsp;improve&nbsp;enhancement,&nbsp;if&nbsp;the&nbsp;we&nbsp;cannot&nbsp;generate&nbsp;cache&nbsp;before&nbsp;this&nbsp;progress,&nbsp;what&nbsp;we&nbsp;can&nbsp;do&nbsp;is&nbsp;make&nbsp;sure&nbsp;there&nbsp;aren’t&nbsp;too&nbsp;many&nbsp;shapes&nbsp;in&nbsp;one&nbsp;extent&nbsp;at&nbsp;the&nbsp;same&nbsp;time.&nbsp;For&nbsp;example,&nbsp;if&nbsp;we&nbsp;have&nbsp;data&nbsp;for&nbsp;all&nbsp;the&nbsp;roads&nbsp;of&nbsp;USA&nbsp;but&nbsp;we&nbsp;render&nbsp;it&nbsp;in&nbsp;the&nbsp;world&nbsp;level,&nbsp;the&nbsp;program&nbsp;will&nbsp;very&nbsp;slow&nbsp;or&nbsp;looks&nbsp;stop.&nbsp;So&nbsp;we&nbsp;need&nbsp;to&nbsp;tell&nbsp;the&nbsp;user&nbsp;don’t&nbsp;render&nbsp;too&nbsp;big&nbsp;data&nbsp;in&nbsp;high&nbsp;level,&nbsp;any&nbsp;solution&nbsp;need&nbsp;based&nbsp;on&nbsp;this&nbsp;point.&nbsp;  
&nbsp;&nbsp;  
&nbsp;BTW,&nbsp;do&nbsp;you&nbsp;think&nbsp;that’s&nbsp;possible&nbsp;to&nbsp;split&nbsp;the&nbsp;big&nbsp;data&nbsp;to&nbsp;multiply&nbsp;small&nbsp;ones?&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don

---

<div class="post-metadata">

**Author:** ![Russ](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/r/e36b37/32.png) [@Russ](https://community.thinkgeo.com/u/Russ)\
**Post date:** [December 9, 2014, 10:36am UTC](https://community.thinkgeo.com/t/performance-tuning-with-large-number-of-shape-layers/2486/6 "2014-12-09T10:36:05Z")

</div>

Thanks&nbsp;again,&nbsp;that’s&nbsp;pretty&nbsp;much&nbsp;the&nbsp;same&nbsp;conclusion&nbsp;I&nbsp;was&nbsp;coming&nbsp;to.&nbsp;&nbsp;And&nbsp;splitting&nbsp;the&nbsp;data&nbsp;differently&nbsp;isn’t&nbsp;likely&nbsp;to&nbsp;be&nbsp;practical&nbsp;given&nbsp;the&nbsp;ecosystem&nbsp;that&nbsp;produces&nbsp;and&nbsp;uses&nbsp;it.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Also,&nbsp;any&nbsp;comment&nbsp;on&nbsp;the&nbsp;last&nbsp;question&nbsp;about&nbsp;the&nbsp;zoom&nbsp;levels?

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [December 10, 2014, 2:02am UTC](https://community.thinkgeo.com/t/performance-tuning-with-large-number-of-shape-layers/2486/7 "2014-12-10T02:02:40Z")

</div>

Hi&nbsp;Russ,&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;don’t&nbsp;know&nbsp;how&nbsp;you&nbsp;detail&nbsp;implement&nbsp;that,&nbsp;but&nbsp;I&nbsp;think&nbsp;you&nbsp;should&nbsp;add&nbsp;many&nbsp;zoomLevel&nbsp;to&nbsp;the&nbsp;customZoomLevels&nbsp;of&nbsp;map.&nbsp;Then&nbsp;you&nbsp;should&nbsp;set&nbsp;the&nbsp;style&nbsp;for&nbsp;the&nbsp;customZoomLevels&nbsp;of&nbsp;your&nbsp;layer.&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;did&nbsp;a&nbsp;test&nbsp;and&nbsp;found&nbsp;when&nbsp;we&nbsp;modify&nbsp;the&nbsp;customeZoomLevel&nbsp;and&nbsp;modify&nbsp;the&nbsp;style&nbsp;of&nbsp;layer,&nbsp;it&nbsp;still&nbsp;works.&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;Please&nbsp;see&nbsp;my&nbsp;test&nbsp;code&nbsp;as&nbsp;below&nbsp;and&nbsp;let&nbsp;me&nbsp;know&nbsp;if&nbsp;I&nbsp;misunderstand&nbsp;your&nbsp;question.&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;` private void SelectFeatures_Load(object sender, EventArgs e)        {            winformsMap1.MapUnit = GeographyUnit.DecimalDegree;            winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);            winformsMap1.ZoomLevelSet.CustomZoomLevels.Add(winformsMap1.ZoomLevelSet.ZoomLevel01);            winformsMap1.ZoomLevelSet.CustomZoomLevels.Add(winformsMap1.ZoomLevelSet.ZoomLevel02);            ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"…\SampleData\Data\Countries02.shp");            worldLayer.ZoomLevelSet = winformsMap1.ZoomLevelSet;            worldLayer.ZoomLevelSet.CustomZoomLevels[0].DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green));            worldLayer.ZoomLevelSet.CustomZoomLevels[1].DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Blue));            LayerOverlay staticOverlay = new LayerOverlay();            staticOverlay.Layers.Add(“WorldLayer”, worldLayer);            winformsMap1.Overlays.Add(staticOverlay);            winformsMap1.MapClick += new EventHandler<MapClickWinformsMapEventArgs>(winformsMap1_MapClick);            winformsMap1.CurrentExtent = new RectangleShape(-139.2, 92.4, 120.9, -93.2);            winformsMap1.Refresh();        }        void winformsMap1_MapClick(object sender, MapClickWinformsMapEventArgs e)        {            winformsMap1.ZoomLevelSet.CustomZoomLevels.Add(winformsMap1.ZoomLevelSet.ZoomLevel03);            winformsMap1.ZoomLevelSet.CustomZoomLevels.Add(winformsMap1.ZoomLevelSet.ZoomLevel04);            ((winformsMap1.Overlays[0] as LayerOverlay).Layers[0] as ShapeFileFeatureLayer).ZoomLevelSet.CustomZoomLevels[2].DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Yellow));            ((winformsMap1.Overlays[0] as LayerOverlay).Layers[0] as ShapeFileFeatureLayer).ZoomLevelSet.CustomZoomLevels[3].DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Red));        }`&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don
