当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET从Session中删除项目?

如何解决《ASP.NET从Session中删除项目?》经验,为你挑选了4个好方法。

哪种方法更受青睐?

Session.Remove("foo");

Session["foo"] = null;

有区别吗?



1> Buu Nguyen..:

有区别吗?

有. Session.Remove(key)从字典中删除条目(键和值),同时Session[key] = null为键分配值(恰好为空).在前一次调用之后,密钥不会出现在Session#Keys集合中.但是在后者之后,仍然可以在密钥集合中找到密钥.


已知InProc会话状态在负载下非常不稳定.如果它被滥用(一直发生),那么Session ["foo"] = null将比Session.Remove ["foo"]表现得更好.垃圾收集器应该清理过多的会话变量.

2> JakubRi..:

我知道这是旧线程,但绝对坚持Session["key"] = null- 它更快!我已经完成了一些测试(在InProc会话状态下),删除了1000个项目(经过的时间总共为1000个项目,所以如果你想要一个项目的平均时间,只需将它除以1000):

删除1000个现有项目:

Session[key] = null; - 0.82380000000000009 ms
Session.Remove(key); - 59.960100000000004 ms

删除1000个不存在的项目:

Session[key] = null; - 1.5368000000000002 ms
Session.Remove(key); - 0.6621 ms

删除500个现有项目和500个不存在的项目:

Session[key] = null; - 1.0432000000000001 ms
Session.Remove(key); - 33.9502 ms

这是第一个测试的代码:

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw1 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = null;
sw1.Stop();

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw2 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session.Remove(i.ToString());
sw2.Stop();


是否有理由在会话中有1000个项目?

3> dove..:

我会选择删除,但不能诚实地说是否存在差异.猜测可能仍然有一个为空值保留的空键但不确定.删除会给我一点怀疑,如果这是你想要做的事情,它也会在代码中更好地阅读.



4> splattne..:

它具有相同的效果.我个人认为Session.Remove方法确实更好地表达了程序员的意图.

这里有一些MSDN文档的链接:

HttpSessionState类

HttpSessionState.Item属性(String)

"HttpSessionState.Item属性:

属性值类型:System.Object

具有指定名称的会话状态值,如果项目不存在,则为null引用(在Visual Basic中为Nothing)."

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有