Какой метод является предпочтительным?
Session.Remove("foo");
Session["foo"] = null;
Есть ли разница?
Какой метод является предпочтительным?
Session.Remove("foo");
Session["foo"] = null;
Есть ли разница?
Есть ли разница?
Есть.
Session.Remove(key)
удаляет запись (как ключ, так и значение) из словаря, а Session[key] = null
присваивает ключу значение (которое является нулевым). После первого вызова ключ не появится в коллекции Session#Keys
. Но после последнего ключ все еще можно найти в коллекции ключей.
Я знаю, что это старый поток, но определенно придерживайтесь 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();
Я бы пошел с Remove, но не могу честно сказать, есть ли разница. При догадывании все еще может быть пустой ключ для этого нулевого значения, но не уверен. Удалить не даст мне никаких сомнений, и если это то, что вы хотите сделать, лучше читает в коде.
Он имеет тот же эффект. Я лично считаю, что метод Session.Remove
действительно лучше выражает программиста.
Вот некоторые ссылки на документацию по MSDN:
"Свойство HttpSessionState.Item:
Значение свойства
Тип: System.Object
Значение состояния сеанса с указанным именем или нулевой ссылкой (Nothing в Visual Basic), если элемент не существует.
Самое большое различие заключается в том, как вы читаете сеанс.
if(Session.ContainsKey["foo"]) { return Session["foo"]; }
или
if(Session["foo"] != null) { return Session["foo"]; }
Если вы используете первый метод, установка значения в значение null не будет работать, и вы должны использовать remove.
Если вы используете второй метод, вы можете установить значение null.