public void SetCacheSize(long cacheSize, ImageCacheService.CacheTruncatePriority truncatePriority) { if (cacheSize < ImageCacheService.MinCacheSize) { throw new ArgumentException($"Cache size can not be lower then {GeneralConverters.FileSizeToStringFormater.ConvertFileSizeToString(ImageCacheService.MinCacheSize, 0)}"); } if (cacheSize > ImageCacheService.MaxCacheSize) { throw new ArgumentException($"Cache size can not be higher then {GeneralConverters.FileSizeToStringFormater.ConvertFileSizeToString(ImageCacheService.MaxCacheSize, 0)}"); } if (cacheSize < CacheSize) { TruncateCache(truncatePriority); } _cacheSize = cacheSize; _maxCacheSize = cacheSize; }
private void TruncateCache(ImageCacheService.CacheTruncatePriority truncatePriority) { _cacheSizeIsValid = false; long truncatedSize = Convert.ToInt64((double)_maxCacheSize * 0.75d); if (truncatePriority == ImageCacheService.CacheTruncatePriority.RemoveOldest) { while (_cachedImages.Count > 0 && CacheSize > truncatedSize) { string oldestImageFilename = _cachedImages.Values.OrderByDescending(x => x.AddedToCacheTime).First().Filename; _cachedImages.Remove(oldestImageFilename); _cacheSizeIsValid = false; } } else { while (_cachedImages.Count > 0 && CacheSize > truncatedSize) { string oldestImageFilename = _cachedImages.Values.OrderByDescending(x => x.Size).First().Filename; _cachedImages.Remove(oldestImageFilename); _cacheSizeIsValid = false; } } }