ASP.NET从Session中删除一个项目?

哪种方法是首选?

Session.Remove("foo"); Session["foo"] = null; 

有区别吗?

有区别吗?

有。 Session.Remove(key)从字典中删除条目(key和value),而Session[key] = null将一个值(恰好为null)赋值给一个键。 在前面的调用之后,密钥不会出现在Session#Keys集合中。 但是在后者之后,钥匙仍然可以在钥匙中find。

我知道这是旧的线程,但肯定会坚持Session["key"] = null – 它要快得多! 我已经做了一些testing(在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 

这里是第一个testing代码:

 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(); 

我会去与去除,但不能诚实地说,如果有差异。 在猜测可能仍然有一个空的密钥保留为空值,但不知道。 删除会给我一点疑惑,如果这就是你想要做的,它代码读取更好

它有同样的效果。 我个人认为Session.Remove方法更能expression程序员的意图。

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

  • HttpSessionState类
  • HttpSessionState.Item属性(string)

“HttpSessionState.Item属性:

属性值types:System.Object

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

最大的区别是你如何从会话中读取。

 if(Session.ContainsKey["foo"]) { return Session["foo"]; } 

要么

 if(Session["foo"] != null) { return Session["foo"]; } 

如果使用第一种方法,则将值设置为null将不起作用,您应该使用remove。

如果使用第二种方法,则可以将该值设置为null。