【发布时间】:2015-11-07 11:17:29
【问题描述】:
我已经研究过,联系了朋友,但仍然无法让它发挥作用。即使Caching in a console application 真的没有回答这个问题。
我有一个计划任务,在接下来的 12 小时内每小时运行一次此应用程序,并使用去年的数据作为参考。
当然,去年的数据不会改变,这是使用缓存的完美案例,特别是因为查询需要 90 到 110 秒才能运行,具体取决于服务器的繁忙程度。
using System.Runtime.Caching;
private static ObjectCache o_Cache = MemoryCache.Default;
private static IEnumerable<SWFSalesModel> GetLastYearsSalesData(ObjectCache o_Cache, string cacheKey) {
IEnumerable<SWFSalesModel> arrLastYearsData = o_Cache.GetCacheItem(cacheKey) as IEnumerable<SWFSalesModel>;
if (arrLastYearsData == null) {
Console.WriteLine("Look in the cache 2");
arrLastYearsData = (IEnumerable<SWFSalesModel>)o_Cache.Get(cacheKey);
}
if (arrLastYearsData == null) {
Console.WriteLine("Look in the cache 3");
arrLastYearsData = (IEnumerable<SWFSalesModel>)o_Cache[cacheKey];
}
if (arrLastYearsData != null) {
return arrLastYearsData;
} else {
Console.WriteLine("nope, not in the cache");
arrLastYearsData = GetLastYearSales(); ;
CacheItemPolicy policy = new CacheItemPolicy();
Console.WriteLine("Adding to the cache...");
policy.AbsoluteExpiration = DateTimeOffset.Now.AddHours(12.0);
o_Cache.Add(cacheKey, arrLastYearsData, policy);
IEnumerable<SWFSalesModel> arrTest = (IEnumerable<SWFSalesModel>)o_Cache[cacheKey];
if (arrTest != null) {
/* This works 100% of the time */
Console.WriteLine("it's in test cache!");
} else {
Console.WriteLine("nope, nada in test cache");
}
return arrLastYearsData;
}
}
然后在程序中调用:
/* Get Last Years Sales Data */
string cacheKey = DateTime.Today.ToString("MM/dd/yyyy");
IEnumerable<SWFSalesModel> arrLastYearSales = GetLastYearsSalesData(o_Cache, cacheKey);
我也试过在函数中引用内存缓存:
private static IEnumerable<SWFSalesModel> GetLastYearsSalesData(string cacheKey) {
ObjectCache o_Cache = MemoryCache.Default;
....
}
有些东西我显然不明白,非常感谢任何人对此的帮助!
【问题讨论】:
-
您能更清楚地描述您面临的问题吗?
标签: c# caching memcached console-application