· Set the InterlevelQuality property on the RIM MapModel. This controls how quad-tree pyramid tiles are maintained in the model and when to switch them out in the MapView. Values from 0.0 to 1.0 are acceptable and the default is 0.5. As the value approaches zero, tiles at higher levels in the pyramid are used more often between zoom levels (stretching them) and as the value approaches 1.0, tiles lower in the pyramid are used more often between zoom levels (compressing them.) Lower values of InterlevelQuality improve loading and rendering speeds while sacrificing visual quality. Higher values increase the number of tiles loaded and hence lower performance.
· Set the ExcludeFromBackdrop property on a TileLayer instance. If you are using a tile backdrop (i.e. EnableTileBackdrop is true on the MapView) then tiles remain displayed as you move between zoom levels creating a seamless visual effect as opposed to clearing the screen each time. This is similar to a MultiscaleImage transition effect and you will generally want it turned on. However, you typically only need this on your lowest base TileLayer in your map. For additional TileLayers above the base layer, you should exclude them from the backdrop. So for example, if your base TileLayer is Bing, the ExcludeFromBackdrop property on this layer should be set to false. If you have a MapDotNet UX overlay TileLayer, you will set the ExcludeFromBackdrop property to true. This will greatly reduce the number of tiles requested and cached for the excluded TileLayer.
· Set the SuspendLoadingDuringZoomAnimations property on a TileLayer instance. Setting this to true will suspend loading any new content while you are changing zoom levels. This can greatly reduce server traffic for tile request. For base maps such as Bing, it is usually preferable to set this false since the tiles are going from MSDN directly to the client and the visual effect is better.
· Set the ForwardOnlyUnhandledMouseGestures property on the MapController. If true, this will prevent mouse events that are handled internally from propagating up the logical RIM hierarchy thereby reducing event traffic. You must set this false if you need to handle mouse gestures that are also handled internally.
· Use the MapViewChangeComplete event on the MapView to display changes that might normally be displayed by a mouse move gesture. For example, if you are displaying the current map center in lat/lon, using this event will only update the values once you have stopped panning. If you handle this case with a mouse-move, a lot of extra event handling, processing and UI updating will be incurred.
· Set the MaxRequestThreads property on a TileLayer instance. This controls the number of simultaneous asynchronous calls to the server for content for that TileLayer (noting you may have multiple TileLayers.) Typical values range from one to eight. For Silverlight, if you have several TileLayers in your map, you may want to limit this number to two or three as you can max out your worker threads. Higher values will put more load on the server but can load maps faster on the client.
· Use a WMSTileRequestor instead of a MDNSMapTileRequestor to request static map tiles from MapDotNet UX. This is especially helpful if your map definition file is large. However, if you need to customize the returned content on-the-fly (beyond simply turning map layers on or off), then you must use the more versatile MDNSMapTileRequestor.
· Set the AutoRemoveUnreferencedPyramids property on the MapModel. This is set to false by default. Setting it to true will automatically clear quad-tree cache content as soon as it is no longer referenced by any TileLayer. This will allow the RIM memory manager to clean up resources quicker and more efficiently. However, if in your application a map can be dynamically altered by the user (such as turning map layers on or off) then you may want this to be set to false. If set to true and a user changes appearance of the map on the client and then returns back to a previous state, RIM will have to reload content from the server instead of retrieving it from cache.
· Store your spatial data in Spherical Mercator (EPSG 3857.) Since the standard visualization projection is 3857, storing your data in this projection will reduce the amount of transforming for map rendering and spatial queries.
· Limit the number of ISC.MapDotNetServer.Common.Maps.Layers in your map and make sure if you need to dynamically alter them (setting LayerState to Modified) that you restore LayerState to Baseline when no longer needed. When a LayerState is set to modified, the entire Layer object-graph is sent to the server of each tile request. If set to Baseline, only the ID of the Layer is sent.
· Fine-tune the XAML in your map files for point features. Very complex XAML for point features will balloon the size of your map file and increase the amount of traffic between client and server (especially if you flag the Layer as Modified.)
· Use an MDNSGeomTileRequestor. If you are overlaying a single spatial layer on a static base map then this may be a great option especially if:
o The maximum number of features on the client is not large
o You will often filter the number of records displayed on the client
o You will often change the symbology or render heat-maps
· Properly set up your spatial indexes and create multiple spatial indexes for separate regions
· Use the MapDotNet Line Optimizer (provided in the UX SDK folder) for optimizing line segments for tile-based mapping solutions. This tool supports removing duplicates, splicing, splitting on tile boundaries and line simplification and can greatly improve rendering times for your data
· Use tile caching for static map tiles – see this article