C# 垃圾收集器将如何处理ASP.NET MVC中的会话 公共字典MYObjectContainer { 得到 { 如果(会话[“MYObjectPool”]==null) 会话[“MYObjectPool”]=新字典(); 返回(字典)会话[“MYObjectPool”]; } 设置 { 会话[“MYObjectPool”]=值; } } 公共行动结果关闭() { 尝试 { MyObject obj=此.MYObjectContainer[“Key”] this.MYObjectContainer=null; 返回Json(新的{success=true},JsonRequestBehavior.AllowGet); } 捕获(例外情况除外) { 掷X } }
当对象没有有效的引用时,垃圾收集器将删除 这里有两位裁判 1.obj(局部变量) 2.会议 首先,我通过设置this.MYObjectContainer=null使会话仲裁无效代码> 第二,当函数结束时,obj将弹出堆栈,因此第二个裁判无效 这是否使C# 垃圾收集器将如何处理ASP.NET MVC中的会话 公共字典MYObjectContainer { 得到 { 如果(会话[“MYObjectPool”]==null) 会话[“MYObjectPool”]=新字典(); 返回(字典)会话[“MYObjectPool”]; } 设置 { 会话[“MYObjectPool”]=值; } } 公共行动结果关闭() { 尝试 { MyObject obj=此.MYObjectContainer[“Key”] this.MYObjectContainer=null; 返回Json(新的{success=true},JsonRequestBehavior.AllowGet); } 捕获(例外情况除外) { 掷X } },c#,asp.net,asp.net-mvc,session,garbage-collection,C#,Asp.net,Asp.net Mvc,Session,Garbage Collection,当对象没有有效的引用时,垃圾收集器将删除 这里有两位裁判 1.obj(局部变量) 2.会议 首先,我通过设置this.MYObjectContainer=null使会话仲裁无效 第二,当函数结束时,obj将弹出堆栈,因此第二个裁判无效 这是否使MYObjectContainer符合清除垃圾收集器的条件 请忽略,如果我的问题完全错了,请建议我 垃圾收集器在ASP.NET会话中如何工作?在上面的示例中,会话对象在会话超时之前不会被垃圾收集 你必须决定这是否是你想要的行为:)-你以后需要这个对象吗 如
MYObjectContainer
符合清除垃圾收集器的条件
请忽略,如果我的问题完全错了,请建议我
垃圾收集器在ASP.NET会话中如何工作?在上面的示例中,会话对象在会话超时之前不会被垃圾收集 你必须决定这是否是你想要的行为:)-你以后需要这个对象吗 如果要从会话中删除对象,还必须写入
Session[“MYObjectPool”]=null
或Session.remove(“MYObjectPool”)
(这将执行相同的操作)
很多时候,在会话中放置对象不是问题,但是如果对象很大(例如兆字节甚至千兆字节)和/或您有很多用户(所有用户都将获得自己的会话),或者同一服务器上的多个站点放置对象将是问题
会话很方便,但您必须认识到它的局限性…由于会话超时,垃圾收集器将间接破坏会话。我的建议是不要担心与此相关的垃圾收集。如果使用Session.adjust()注销,这也会使垃圾收集器立即销毁会话。
当对象没有有效的refere时,垃圾收集器将删除。
-这是错误的。是吗?你能说这是假的吗?
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
}
}