Summary
A LayerOverlay containing a single small shapefile (1.1 MB, ~8,400 line features) takes 7.5 seconds to draw in TileType.MultiTile . The same overlay, same data, same extent, in TileType.SingleTile takes 40–195 ms .
Environment
- ThinkGeo.UI.Wpf 15.0.0-beta127 (Core, Gdal, SqlServer, PostgreSql, Printers, FileGeoDatabase all same version)
- .NET 10 (
net10.0-windows7.0), WPF, x64, Windows 11 - Data: ESRI shapefile, polyline, 1.1 MB
.shp, ~8,400 features, valid and current.idx
Overlay setup
var overlay = new LayerOverlay
{
DrawingQuality = DrawingQuality.Standard,
TileType = TileType.MultiTile,
TileBuffer = 2,
TileCache = new FileRasterTileCache(cachePath, cacheId)
};
shapeFileLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
overlay.Layers.Add(layerKey, shapeFileLayer);
Steps to reproduce
-
LayerOverlaywithMultiTile,TileBuffer = 2, aFileRasterTileCache. - Add one
ShapeFileFeatureLayer(1.1 MB, ~8,400 polylines, valid.idx). -
ZoomLevel01.ApplyUntilZoomLevel = Level20. - Set
CurrentExtentto a single street (~1:1000), so the viewport isn’t cached yet. - Measure between the overlay’s
DrawingandDrawnevents.
What happens
Hooking FeatureLayer.DrawingFeatures and logging e.FeaturesToDraw.Count() shows the layer asked to draw ~60 separate times , 2–16 features each:
18:38:16.827 drawing 11 features
18:38:16.864 drawing 9 features
18:38:17.008 drawing 7 features
... (~60 total)
18:38:24.330 Overlay drawn: StaticOverlay in 7509 ms
~500 features in ~60 batches, 30–450 ms each (~125 ms average). Eight line features cannot take 125 ms to render, so this looks like fixed per-tile cost, not rendering.
Workaround and comparison
| Extent (features drawn) | MultiTile | SingleTile |
|---|---|---|
| street zoom (~500 across ~60 tiles) | 7509 ms | 79–101 ms |
| mid zoom (3,345 features) | – | 68 ms |
| full extent (8,370 features) | – | 87–120 ms |
The last row is the striking one: SingleTile draws all 8,370 features in ~90 ms , while MultiTile needed 7.5 s for ~500.
Already ruled out
-
.idxexists and is not stale (logged at load) - Not cache invalidation — traced every namespace-rotation call site; none fire here
- Not our refresh call — switching from
RefreshAsync()(all overlays) to a targeted refresh didn’t change it; the extent change itself triggers the redraw - Stock
ShapeFileFeatureSource, one visible layer
Is ~125 ms/tile expected here, or a bug in the MultiTile path in beta127?