public Dictionary<string, IMYObject> MYObjectContainer
{
get
{
if (Session["MYObjectPool"] == null)
Session["MYObjectPool"] = new Dictionary<string,IMYObject>();
return (Dictionary<string, IMYObject>)Session["MYObjectPool"];
}
set
{
Session["MYObjectPool"] = value;
}
}
public ActionResult Close()
{
try
{
MyObject obj = this.MYObjectContainer["Key"]
this.MYObjectContainer = null;
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
catch (Exception Ex)
{
throw X
}
}
当对象没有有效的裁判时,垃圾收集器将被删除 这里有两名裁判,
1.obj(局部变量)
2.Session
首先,我通过设置this.MYObjectContainer = null;
使会话裁判无效
第二,当函数结束时,obj将从堆栈弹出,因此第二裁判无效
这是否使MYObjectContainer
有资格清除垃圾收集器?
如果我的问题完全错误,请忽略,请告诉我?
垃圾收集器如何在ASP.NET会话中工作?
答案 0 :(得分:2)
在上面的示例中,在会话超时之前,Session对象不会被垃圾收集。
你必须决定这是否是你想要的行为:) - 你以后需要这个对象吗?
如果你想从Session中删除对象,你还必须写Session["MYObjectPool"] = null
或Session.Remove("MYObjectPool")
(也会这样做)
很多时候在Session中放置对象不是问题,但是如果对象很大(例如兆字节甚至千兆字节)和/或你有很多用户(所有人都会得到他们自己的会话)或许多网站在有相关物品的同一台服务器上将是一个问题。
会话很方便,但你必须意识到它的局限性......