我不确定这种行为是否是由于应用程序的性质(控制台应用程序)造成的。我的最终目标是在类库中使用System.Runtime.Caching.MemoryCache
类,该类将在ASP.Net MVC应用程序中使用。目标是从每次XML文件(数据源)在网络文件夹上更改时填充的MemoryCache返回数据。
为了完成我的实现,我编写了一个简单的控制台应用程序,其中包含将被缓存的List<>
个对象。这是代码。
using System;
using System.Collections.Generic;
using System.Runtime.Caching;
using CachePersons.Core.Logging;
namespace CachePersons
{
class Program
{
static void Main(string[] args)
{
GetPersons();
GetPersons();
GetPersons();
Console.ReadKey();
}
static List<string> GetPersons()
{
List<string> persons;
Log.Debug("Entered GetPersons()");
Console.WriteLine("Entered GetPersons()");
//get default cache
ObjectCache cache = MemoryCache.Default;
//get persons
persons = (List<string>)cache.Get("Persons");
//if cache does not contain the persons, create new list and add it to cache
if (persons == null)
{
persons = GetPersonsFromDatabase();
cache.Add("Persons", persons, new CacheItemPolicy());
}
else
{
Log.Debug(" Found Data in Cache!");
Console.WriteLine(" Found Data in Cache!");
}
Log.Debug("Exited GetPersons()");
return persons;
}
static List<string> GetPersonsFromDatabase()
{
Log.Debug(" Populating Cache 1st time.");
Console.WriteLine(" Populating Cache 1st time.");
return new List<string>()
{
"John Doe",
"Jane Doe"
};
}
}
}
然后我构建了项目并打开了2个单独的命令窗口,然后逐个运行。我期望(ed)在DebugView,Console Output上看到的是,只有一次将填充Cache,并且第二次.exe调用将在缓存中找到数据,并从那里返回它。但那不是发生了什么。请参阅以下屏幕截图来自console和debugview。
并在DebugView中......
我做错了什么?这种行为是因为我使用的是控制台应用吗?如何让缓存在类库中的方法调用中工作?如果在Web应用程序中使用相同的库(IIS 7.5上的ASP.Net MVC),我还需要注意哪些注意事项。
谢谢!