Объект MemoryCache становится нулевым

У меня есть класс 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);
            }
        }
    }
}

person Pouya Samie    schedule 06.01.2015    source источник


Ответы (1)


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

person Pouya Samie    schedule 09.01.2017