|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Media.Imaging;
namespace BookReader
{
internal class ImageCache
{
internal class ImgInfo
{
public ImgInfo(BitmapImage image, object tag)
{
_Image = image;
_Tag = tag;
}
public object _Tag = null;
public BitmapImage _Image = null;
public DateTime _LastAcces = DateTime.Now;
}
public ImageCache()
{
_ImagesCache = new List<ImgInfo>();
}
private long _TotalSize;
private List<ImgInfo> _ImagesCache;
public void Clear()
{
_ImagesCache.Clear();
}
public bool Find(object tag)
{
ImgInfo inf = _ImagesCache.Find(delegate(ImgInfo record)
{
if (record._Tag == tag)
{ return true; }
return false;
});
return inf != null;
}
internal ImgInfo FindInfo(object tag)
{
ImgInfo inf = _ImagesCache.Find(delegate(ImgInfo record)
{
if (record._Tag == tag)
{ return true; }
return false;
});
return inf;
}
public BitmapImage GetImage(object tag)
{
ImgInfo ImgInfo = FindInfo(tag);
if (ImgInfo != null)
{
ImgInfo._LastAcces = DateTime.Now;
return ImgInfo._Image;
}
else
return null;
}
public void Store(object tag, BitmapImage image)
{
_ImagesCache.Add(new ImgInfo( image, tag ));
}
public void ManageCache()
{
while (_ImagesCache.Count > Properties.Settings.Default.ImageCacheCount)
_ImagesCache.Remove(_ImagesCache.First());
_TotalSize = 0;
for (int i = 0; i < Properties.Settings.Default.ImageCacheCount; i++)
{
if (_ImagesCache.Count > i)
{
if (_ImagesCache[i]._LastAcces < DateTime.Now.AddMinutes(-Properties.Settings.Default.ImageCacheDuration))
_ImagesCache.Remove(_ImagesCache[i]);
}
}
foreach( ImgInfo imgInfo in _ImagesCache )
_TotalSize += imgInfo._Image.StreamSource.Length;
}
public string GetCacheInfo()
{
return string.Format("Cache Info : Image {0}/{1}; Size {2}", _ImagesCache.Count, Properties.Settings.Default.ImageCacheCount, _TotalSize);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
WPF and MVVM fan, I practice C # in all its forms from the beginning of the NET Framework without mentioning C ++ / MFC and other software packages such as databases, ASP, WCF, Web & Windows services, Application, and now Core and UWP.
In my wasted hours, I am guilty of having fathered C.B.R. and its cousins C.B.R. for WinRT and UWP on the Windows store.
But apart from that, I am a great handyman ... the house, a rocket stove to heat the jacuzzi and the last one: a wood oven for pizza, bread, and everything that goes inside
https://guillaumewaser.wordpress.com/
https://fouretcompagnie.wordpress.com/