哪种方法更受欢迎?
Session.Remove("foo");
Session["foo"] = null;
有区别吗?
哪种方法更受欢迎?
Session.Remove("foo");
Session["foo"] = null;
有区别吗?
有区别吗?
有区别。
Session.Remove(key)
会从字典中删除项(包括键和值),而 Session[key] = null
则会将空值分配给键。在前者调用后,该键将不会出现在 Session#Keys
集合中。但在后者调用后,键仍可在键集合中找到。
Session["key"] = null
- 它更快!我进行了一些测试(在InProc Session State上),连续删除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();
Session.Remove
方法更好地表达了程序员的意图。我会选择使用“Remove”,但是无法确定是否有区别。 猜测可能仍会保留一个空键以存储该空值,但不确定。 如果您想这样做,“Remove”将使我更加确信,并且在代码中表现更好。
if(Session.ContainsKey["foo"]) { return Session["foo"]; }
或者
if(Session["foo"] != null) { return Session["foo"]; }
如果您使用第一种方法,将值设置为null将不起作用,您应该使用remove。
如果您使用第二种方法,您可以将值设置为null。