内存缓存对象变为空

本文关键字:对象 缓存 内存 | 更新日期: 2023-09-27 18:36:21

我有一个缓存对象的缓存管理器类,但我遇到了问题。有时,完全随机,MemoryCache.Default.Contains(keyName)变为 null,并且我的应用程序无需任何缓存即可工作。我对这个问题感到非常沮丧。

我该怎么办?

它是在安装了.NET 4.5的Windows Server 2008 R2上运行的WebForms 4.0 ASP.NET。

当我在本地机器上运行此应用程序时,我从未遇到过此问题。

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);
            }
        }
    }
}

内存缓存对象变为空

终于我发现了问题。我检查了 IIS,由于意外异常,我的应用程序池正在重置。我的代码没有任何问题。