⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slidingtime.cs

📁 HeyCacher 高性能缓存方案(带源码) 1. 文件的所有权益归上传用户所有 2. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途 3. CSDN下载频道仅提供交流平台
💻 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 + -