2015-01-06 4 views
0

У меня есть класс Cache-manager, который кэширует объект, но у меня есть проблема с ним. Иногда, полностью случайный, MemoryCache.Default.Contains(keyName) становится нулевым, а мое приложение работает без кэширования. Я полностью разочарован этой проблемой.Объект MemoryCache становится нулевым

Что мне делать?

Это 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); 
      } 
     } 
    } 
} 

ответ

0

И, наконец, я нашел проблему. Я проверил IIS, и мой пул приложений был сброшен из-за UnexpectedException. И ничего не случилось с моим кодом.

Смежные вопросы