gpt4 book ai didi

asp.net-mvc - 添加对象后 MemoryCache 为空

转载 作者:行者123 更新时间:2023-12-02 03:25:29 24 4
gpt4 key购买 nike

我在 MVC 3 ASP.NET 应用程序中遇到了 ASP.NET MemoryCaching 的奇怪问题。

每次执行一个action时,我都会检查它的LoginInfo是否确实存储在MemoryCache中(代码已简化,但核心如下):

[NonAction]
protected override void OnAuthorization(AuthorizationContext filterContext) {
Boolean autorizzato = false;
LoginInfo me = CacheUtils.GetLoginData(User.Identity.Name);
if (me == null)
{
me = LoginData.UserLogin(User.Identity.Name);
CacheUtils.SetLoginInfo(User.Identity.Name, me);
}
// Test if the object is really in the memory cache
if (CacheUtils.GetLoginData(User.Identity.Name) == null) {
throw new Exception("IMPOSSIBLE");
}
}

GetLoginInfo 是:

 public static LoginInfo GetLoginData(String Username)
{
LoginInfo local = null;
ObjectCache cache = MemoryCache.Default;
if (cache.Contains(Username.ToUpper()))
{
local = (LoginInfo)cache.Get(Username.ToUpper());
}
else
{
log.Warn("User " + Username + " not found in cache");
}
return local;
}

SetLoginInfo 是:

        public static void SetLoginInfo (String Username, LoginInfo Info)
{
ObjectCache cache = MemoryCache.Default;
if ((Username != null) && (Info != null))
{
if (cache.Contains(Username.ToUpper()))
{
cache.Remove(Username.ToUpper());
}
cache.Add(Username.ToUpper(), Info, new CacheItemPolicy());
}
else
{
log.Error("NotFound...");
}
}

代码非常简单,但有时(完全随机),在将 LoginInfo 添加到 MemoryCache 后,结果为空,刚刚添加的对象不存在,因此我得到了异常。

我正在 Cassini 和 IIS 7 上对此进行测试,它似乎与 AppPool 可重用性(在 IIS 7 中启用)无关,我已经使用多个缓存策略进行了测试,但无法使其工作

我错过了什么/失败了什么?

PS:请原谅我的英语不好

最佳答案

使用反编译器查看 MemoryCache 的代码,有以下私有(private)函数

private void OnUnhandledException(object sender, UnhandledExceptionEventArgs eventArgs)
{
if (!eventArgs.IsTerminating)
return;
this.Dispose();
}

当前域的每个 MemoryCache 都会设置一个未处理的异常处理程序 Thread.GetDomain() 因此,如果您的应用程序中有任何未捕获的异常,这在网站中可能很常见它永远处置 MemoryCache 并且不能重复使用,这对于 IIS 应用程序尤其重要,而不是仅因未处理的异常而退出的 Windows 应用程序。

关于asp.net-mvc - 添加对象后 MemoryCache 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com