0

我希望缓存元素中的项目应该在每天晚上 11:59:59 的特定时间删除一次。
我知道absoluteExpiration缓存中有一个属性可以在特定时间段内使用。
我正在使用以下代码在缓存中设置值

   public static Collection<CProductMakesProps> GetCachedSmartPhoneMake(HttpContext context)
    {
        var allMake = context.Cache["SmartPhoneMake"] as Collection<CProductMakesProps>;
        if (allMake == null)
        {
            allMake = new CModelRestrictionLogic().GetTopMakes();
            context.Cache.Insert("SmartPhoneMake", allMake, null, 
            DateTime.Now.AddHours(Int32.Parse(ConfigurationManager.AppSettings["MakeCacheTime"])),
            Cache.NoSlidingExpiration);
        }
        return allMake;
    } 

但是我如何设置缓存到期的确切时间。
我是否需要manipulate时间变量并计算time difference并设置absoluteExpiration或有其他方式。

4

2 回答 2

0

请在 SO 中检查此答案。它使用 ASP.NET 计时器控件在一天中的特定时间引发事件。我建议您将此值保留为配置条目。此外,还有其他建议。

如何使用 .NET Timer 类在特定时间触发事件?

于 2013-02-04T06:54:29.013 回答
0

我找到了创建如下函数的方式

    private static double GetTimeLeft()
    {
        //create a time stamp for tomorow 00:10 hours
        var tomorrow0010Minute = DateTime.Now.AddDays(1).Date.AddMinutes(10);
        return Math.Round((tomorrow0010Minute - DateTime.Now).TotalHours);
    }

这给了我一个双重值,我在我的函数中使用如下

public static Collection<CProductMakesProps> GetCachedSmartPhoneMake(HttpContext context)
{
    var allMake = context.Cache["SmartPhoneMake"] as Collection<CProductMakesProps>;
    if (allMake == null)
    {
        allMake = new CModelRestrictionLogic().GetTopMakes();
        context.Cache.Insert("SmartPhoneMake", allMake, null, 
        DateTime.Now.AddHours(GetTimeLeft()),
        Cache.NoSlidingExpiration);
    }
    return allMake;
} 

并做了 :)

于 2013-02-06T07:19:10.000 回答