1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public class AutoPurgeCollection<T> : Collection<T>, IDisposable
where T : IExpirable
{
private readonly TimeSpan _itemLifeTime;
private readonly System.Timers.Timer _purgeTimer;
public AutoPurgeCollection(TimeSpan itemLifeTime, TimeSpan purgeInterval)
{
_itemLifeTime = itemLifeTime;
_purgeTimer = new System.Timers.Timer(purgeInterval.TotalMilliseconds);
_purgeTimer.Elapsed += (sender, e) => Purge();
_purgeTimer.AutoReset = true;
_purgeTimer.Start();
}
protected virtual void Purge()
{
DateTime now = DateTime.Now;
var itemsToRemove = Items.Where(i => now - i.CreationDate > _itemLifeTime).ToArray();
foreach (var item in itemsToRemove)
{
Items.Remove(item);
}
}
public void Dispose()
{
_purgeTimer.Dispose();
}
} |
Partager