コード例 #1
0
        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;
        }
コード例 #2
0
        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;
                }
            }
        }