[英]How will the Garbage Collector handle a Session in ASP.NET MVC
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;
使会话裁判无效this.MYObjectContainer = null;
其次,当函数结束时,obj将从堆栈中弹出,因此第二个裁判无效
这是否使有资格清除垃圾收集器的MYObjectContainer
?
如果我的问题完全错了,请忽略,请给我建议?
垃圾收集器如何在ASP.NET会话中工作?
在上面的示例中,直到会话超时,才会对Session对象进行垃圾回收。
您必须确定这是否是您想要的行为:)-以后是否需要该对象?
如果要从Session中删除对象,则还必须编写Session["MYObjectPool"] = null
或Session.Remove("MYObjectPool")
(将执行相同的操作)
很多情况下,在Session中放置对象并不是问题,但是如果对象很大(例如,兆字节甚至是千兆字节),并且/或者您有很多用户(所有人都有自己的会话),或者在同一站点上有很多站点服务器周围放置对象将是一个问题。
会话很方便,但是您必须意识到它的局限性...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.