ASP.NET如何从会话中删除项?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

首选哪种方法?

Session.Remove("foo");

Session["foo"] = null;

有什么不同吗?

提问于
用户回答回答于

有区别吗?

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

用户回答回答于

我知道这是旧线程,但绝对坚持Session["key"] = null- 它要快得多!我已经做了一些测试(在InProc Session State上),在行中删除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();

扫码关注云+社区