Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 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会话中如何工作?在上面的示例中,会话对象在会话超时之前不会被垃圾收集 你必须决定这是否是你想要的行为:)-你以后需要这个对象吗 如

当对象没有有效的引用时,垃圾收集器将删除 这里有两位裁判

1.obj(局部变量)

2.会议

首先,我通过设置this.MYObjectContainer=null使会话仲裁无效 第二,当函数结束时,obj将弹出堆栈,因此第二个裁判无效

这是否使
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
    }
}