private void PruneLowestScoringItems(CacheServer cacheServer, Context context) { var cachedVideoRequests = cacheServer.VideoCache.Values.OrderBy(v => v.CacheScore).ToList(); var consumedSpace = cacheServer.ConsumedSpace(); var removedVideos = new List <CachedVideoRequest>(); for (int i = 0; i < cachedVideoRequests.Count; i++) { if (cacheServer.MaxMB < consumedSpace) { consumedSpace -= cachedVideoRequests[i].Video.VideoSizeInMb; removedVideos.Add(cachedVideoRequests[i]); cachedVideoRequests[i].OriginalRequest.IsCached = false; cacheServer.VideoCache.Remove(cachedVideoRequests[i].VideoID); } if (consumedSpace <= cacheServer.MaxMB) { break; } } //add back in as many high scoring requests as possible foreach (var removedVideo in removedVideos.OrderByDescending(r => r.CacheScore)) { if (removedVideo.Video.VideoSizeInMb + consumedSpace > cacheServer.MaxMB) { continue; } consumedSpace += removedVideo.Video.VideoSizeInMb; cacheServer.VideoCache[removedVideo.VideoID] = removedVideo; } }