У меня есть класс Cache-manager, который кэширует объект, но у меня с ним проблема. Иногда совершенно случайно MemoryCache.Default.Contains(keyName)
становится нулевым, и мое приложение работает без кэширования. Я полностью разочарован этой проблемой.
Что я должен делать?
Это ASP.NET WebForms 4.0, работающий на Windows Server 2008 R2 с установленным .NET 4.5.
У меня никогда не было этой проблемы, когда я запускал это приложение на локальной машине.
public class CacheManager
{
private static object _lockObject = new object();
public static object GetItem(string keyName, Func<object> action)
{
if (!MemoryCache.Default.Contains(keyName)) {
System.Threading.Monitor.Enter(_lockObject);
try {
if (!MemoryCache.Default.Contains(keyName)) {
dynamic value = action.Invoke();
MemoryCache.Default.Set(keyName, value, System.DateTime.Now.AddDays(10));
}
}
finally {
System.Threading.Monitor.Exit(_lockObject);
}
}
return MemoryCache.Default.GetCacheItem(keyName).Value;
}
public static void ResetCache(string keyName)
{
if (MemoryCache.Default.Contains(keyName)) {
System.Threading.Monitor.Enter(_lockObject);
try {
if (MemoryCache.Default.Contains(keyName)) {
MemoryCache.Default.Remove(keyName);
}
}
finally {
System.Threading.Monitor.Exit(_lockObject);
}
}
}
}