我是否错误地使用了 Session_End?
在我的应用程序中,我有一个缓存来加速页面加载,它工作得很好。最近,有人向我建议,我从不清空内存是在泄漏内存,并在 Session_End 上实现一个方法,该方法将清除与该会话 ID 关联的所有缓存条目。
虽然我偶尔会开始看到异常行为。加载页面时,我很少会看到一个空页面,由于该页面的缓存为空而显示异常。我在缓存访问和 session_end 方法中放置了一个调试器断点,希望下次它发生时能够捕获它。
下次它发生时,我对实际发生的事情感到非常惊讶。我的浏览器一直处于打开状态但闲置了很长时间,所以我猜它有一个陈旧的会话 cookie。它访问页面的服务器,将页面的副本放入缓存中。当页面仍在加载时,会立即调用 Session_End,将其从缓存中删除。如果我重新加载浏览器,Session_End 会不断被调用,并积极尝试关闭糟糕的浏览器不断请求的会话。
所以我想我真正的问题是:
- 如果旧的会话 cookie 对 IIS 很不利,为什么浏览器不获取新的会话 cookie?
- Session_End 是否根本不适合以这种方式使用?
- 有没有更好的方法来做我想做的事情?
@Sosh - 我的 global.asax.cs:
protected void Session_End(Object sender, EventArgs e)
{
//clean up object cache on session expiry
string sessionID = this.Session.SessionID;
foreach (string key in Global.DataGroups.Keys)
{
if (key.EndsWith(sessionID))
{
Global.DataGroups.Remove(key);
}
}
}