Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# Session.Remove(“Session”变量“);不工作?_C#_Asp.net_Session - Fatal编程技术网

C# Session.Remove(“Session”变量“);不工作?

C# Session.Remove(“Session”变量“);不工作?,c#,asp.net,session,C#,Asp.net,Session,您好,下面是我在完成某些任务后试图删除会话的内容。但是session.remove()在这里不起作用 if (Session["CaseNumber"] != "" || Session["CaseNumber"] != null) { casenumber = Session["CaseNumber"].ToString(); guid = Session["guid"].ToString(); _dura

您好,下面是我在完成某些任务后试图删除会话的内容。但是session.remove()在这里不起作用

if (Session["CaseNumber"] != "" || Session["CaseNumber"] != null)
        {
            casenumber = Session["CaseNumber"].ToString();
            guid = Session["guid"].ToString();
            _duration = bal.viewServiceActivity(guid);
            case1 = bal.viewCaseDetail(casenumber);
            dt = bal.getRelatedNotes(guid);
            Session.Remove("CaseNumber");
            Session.Remove("guid");

        }
        else
        {
            casenumber = Session["searchCase"].ToString();
            guid = Session["caseGuid"].ToString();
            _duration = bal.viewServiceActivity(guid);
            case1 = bal.viewCaseDetail(casenumber);
            dt = bal.getRelatedNotes(guid);
            Session.Remove("searchCase");
            Session.Remove("caseGuid");
        }

上面显示的部分代码并没有什么问题。只需要了解它是如何工作的

Session.Remove(key)
删除会话字典中用于密钥的内存。使用第二种方法时:
Session[“searchCase”]=null,尽管该值为空,但该密钥仍将存在于会话中

尝试将
会话[“Key\u Name”]
设置为
null
。例如:

if (Session["CaseNumber"] != "" || Session["CaseNumber"] != null)
            {
                casenumber = Session["CaseNumber"].ToString();
                guid = Session["guid"].ToString();
                _duration = bal.viewServiceActivity(guid);
                case1 = bal.viewCaseDetail(casenumber);
                dt = bal.getRelatedNotes(guid);
                Session["CaseNumber"] = null; // Set NULL
                Session["guid"] = null; // Set NULL

            }
Session.Remove()
不会绕过对象引用和内存管理的所有基本.net规则来销毁对象。
这里需要了解的是,
Session.Remove()
完全按照它的建议执行:它从对象的内部集合中删除对对象的引用。没什么可期待的了

如果您需要销毁某些内容,则需要实现
IDisposable
,此外,如果您匆忙使用
GC.collect()
,可以指示垃圾收集器进行收集

请勾选此问题:

证实了这一点

它看起来更像是一种优化或所谓的标准实现方式。 当您移除一个对象时,它会被标记为“移除”,但不会真正移除…除非需要空间。 垃圾收集就是这样工作的。仅仅因为一个对象超出了作用域,并不意味着它的析构函数被调用,内存被立即释放。可能是
GC
可以在很久以后删除对象

不过,作为最后一项检查,请执行以下操作:


请确保您没有查看页面的缓存版本,或者您没有在应用程序中的某个位置再次将项目添加到会话对象中。

可能的重复项可以参考此[此处][1][1]:谢谢我已尝试了所有方法,但没有任何结果。您如何知道“它不起作用”?你在检查什么,怎么做,什么时候做?