MemoryCache 对象变为空
MemoryCache object become null
我有一个缓存管理器 class 可以缓存一个对象,但我有一个问题。有时,完全随机,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);
}
}
}
}
终于找到问题了。我检查了 IIS,我的应用程序池由于 UnexpectedException 而被重置。而且我的代码没有任何问题。
我有一个缓存管理器 class 可以缓存一个对象,但我有一个问题。有时,完全随机,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);
}
}
}
}
终于找到问题了。我检查了 IIS,我的应用程序池由于 UnexpectedException 而被重置。而且我的代码没有任何问题。