繁体   English   中英

垃圾收集器将如何处理ASP.NET MVC中的会话

[英]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"] = nullSession.Remove("MYObjectPool") (将执行相同的操作)

很多情况下,在Session中放置对象并不是问题,但是如果对象很大(例如,兆字节甚至是千兆字节),并且/或者您有很多用户(所有人都有自己的会话),或者在同一站点上有很多站点服务器周围放置对象将是一个问题。

会话很方便,但是您必须意识到它的局限性...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM