📄 slidingtime.cs
字号:
//===============================================================================
// CSDN HeyCache
//===============================================================================
// 修改记录:[按最后修改时间倒排序]
// 2007.06.11 by tangwei
//
// 代码来源:参考于dotnet企业库3.0版
//===============================================================================
using System;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security.Permissions;
using Microsoft.Practices.EnterpriseLibrary.Caching.Properties;
namespace HeyCacher.Components.Expirations
{
/// <summary>
/// 以相对时间间隔为依赖的过期策略
/// </summary>
[Serializable]
public class SlidingTime : ICacheItemExpiration
{
public DateTime TimeLastUsed
{
get { return timeLastUsed; }
}
private DateTime timeLastUsed;
public TimeSpan ItemSlidingExpiration
{
get { return itemSlidingExpiration; }
}
private TimeSpan itemSlidingExpiration;
public SlidingTime(){ }
public SlidingTime(TimeSpan slidingExpiration)
{
innerCreate(slidingExpiration);
}
internal SlidingTime(TimeSpan slidingExpiration, DateTime originalTimeStamp)
{
timeLastUsed = originalTimeStamp;
innerCreate(slidingExpiration);
}
public void Create(params string[] Params)
{
long ticks = long.Parse(Params[0]) * 10000000;
TimeSpan timeSpan = new TimeSpan(ticks);
innerCreate(timeSpan);
}
private void innerCreate(TimeSpan slidingExpiration)
{
// Check that expiration is a valid numeric value
if (!(slidingExpiration.TotalSeconds >= 1))
{
throw new ArgumentOutOfRangeException("slidingExpiration", Resources.ExceptionRangeSlidingExpiration);
}
this.itemSlidingExpiration = slidingExpiration;
}
public bool HasExpired()
{
bool expired = CheckSlidingExpiration(DateTime.Now,
this.timeLastUsed,
this.itemSlidingExpiration);
return expired;
}
public void Notify()
{
this.timeLastUsed = DateTime.Now;
}
public void Initialize(ExpirationItem owningCacheItem)
{
timeLastUsed = owningCacheItem.LastAccessedTime;
}
/// <summary>
/// Check whether the sliding time has expired.
/// </summary>
/// <param name="nowDateTime">Current time </param>
/// <param name="lastUsed">The last time when the item has been used</param>
/// <param name="slidingExpiration">The span of sliding expiration</param>
/// <returns>True if the item was expired, otherwise false</returns>
private static bool CheckSlidingExpiration(DateTime nowDateTime, DateTime lastUsed, TimeSpan slidingExpiration)
{
// Convert to UTC in order to compensate for time zones
DateTime tmpNowDateTime = nowDateTime.ToUniversalTime();
// Convert to UTC in order to compensate for time zones
DateTime tmpLastUsed = lastUsed.ToUniversalTime();
long expirationTicks = tmpLastUsed.Ticks + slidingExpiration.Ticks;
bool expired = (tmpNowDateTime.Ticks >= expirationTicks) ? true : false;
return expired;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -