垃圾回收器将如何处理 MVC ASP.NET 会话

本文关键字:处理 MVC ASP 会话 NET 何处理 | 更新日期: 2023-09-27 18:24:06

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.会话

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

这是否使MYObjectContainer有资格清除垃圾收集器?

如果我的问题完全错误,请忽略,请告诉我吗?

垃圾回收器如何在 ASP.NET 会话中工作?

垃圾回收器将如何处理 MVC ASP.NET 会话

在上面的示例中,在会话超时之前,不会对会话对象进行垃圾回收。

您必须决定这是否是您想要的行为 :) - 您以后需要该对象吗?

如果要从会话中删除对象,还必须编写Session["MYObjectPool"] = nullSession.Remove("MYObjectPool")(这将执行相同的操作(

很多时候,在会话中放置对象不是问题,但是如果对象很大(例如兆字节甚至千兆字节(和/或您有很多用户(所有人都将获得自己的会话(或同一服务器上的许多站点具有对象放置将是一个问题。

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