public static void PurgeLRU() { if (tiles.Count < maxReadyToRenderSize) { return; } List <Tile> notReadyCullList = new List <Tile>(); List <Tile> readyCullList = new List <Tile>(); try { try { foreach (string key in tiles.Keys) { Tile tile = tiles[key]; if (tile.RenderedGeneration < (Tile.CurrentRenderGeneration - 10) && !(tile.RequestPending || tile.Downloading)) { if (tile.ReadyToRender) { readyCullList.Add(tile); } else { notReadyCullList.Add(tile); } } } } catch { } readyToRenderCount = readyCullList.Count; if (readyCullList.Count > maxReadyToRenderSize) { readyCullList.Sort(delegate(Tile t1, Tile t2) { return(t2.AccessCount < t1.AccessCount ? 1 : (t2.AccessCount == t1.AccessCount ? 0 : -1)); } ); int totalToPurge = readyCullList.Count - maxReadyToRenderSize; foreach (Tile tile in readyCullList) { if (totalToPurge < 1) { break; } tile.CleanUp(false); //tile.CleanUp(true); //tiles.Remove(tile.Key); totalToPurge--; } } if (tiles.Count < maxTileCacheSize) { return; } if (notReadyCullList.Count > maxTileCacheSize) { notReadyCullList.Sort(delegate(Tile t1, Tile t2) { return(t2.AccessCount < t1.AccessCount ? 1 : (t2.AccessCount == t1.AccessCount ? 0 : -1)); } ); int totalToPurge = notReadyCullList.Count - maxTileCacheSize; if (totalToPurge > 20) { totalToPurge = 20; } foreach (Tile tile in notReadyCullList) { if (totalToPurge < 1) { break; } tile.CleanUp(true); tiles.Remove(tile.Key); totalToPurge--; } } } catch { } finally { } return; }