Удаление и добавление накладных расходов из состояния сеанса

StackOverflow https://stackoverflow.com/questions/512771

  •  21-08-2019
  •  | 
  •  

Вопрос

Ниже показано, как я обычно обрабатываю объекты в состоянии сеанса, у меня есть строка const в качестве имени сеанса, а затем есть свойство с get и set для объекта.

Что мне было интересно, так это был ли необходим вызов 'Session.Remove()' (для поддержания чистоты и опрятности) и были ли значительные накладные расходы при выполнении этого удаления.

У меня есть сеанс.Удалите это в основном потому, что это заставляет меня чувствовать себя лучше (я знаю ОКР) и заставляет меня чувствовать, что сеанс стал чище, но я хотел бы знать, не нужно ли это.

private const string sesMyObject = "{C2CC72C3-1466-42D4-8579-CAA11F261D55}";
public MyObject MyObjectProperty
{
    get
    {
        return Session[sesMyObject] as MyObject;
    }
    set
    {
        Session.Remove(sesMyObject);
        Session.Add(sesMyObject, value);
    }
}

Редактировать в соответствии с приведенными ниже ответами я изменил свои свойства на следующие:

private const string sesMyObject = "{C2CC72C3-1466-42D4-8579-CAA11F261D55}";
public MyObject MyObjectProperty
{
    get
    {
        return Session[sesMyObject] as MyObject;
    }
    set
    {
        Session[sesMyObject] = value;
    }
}

Спасибо!

Это было полезно?

Решение

Если вы в самом деле чтобы быть в безопасности, попробуйте преобразовать объект в IDisposable, и если это удастся, вызовите Dispose .

IDisposable sesDispObj =  Session[sesMyObject] as IDisposable;
if (sesDispObj != null)
   sesDispObj.Dispose();

Кроме этого,

 Session[sesMyObject] = value

это почти то же самое, что

 Session.Remove(sesMyObject);        
 Session.Add(sesMyObject, value);

Другие советы

Это уже перебор.Ссылающийся MSDN

Если параметр name ссылается на существующий элемент состояния сеанса, существующий элемент перезаписывается указанным значением.

Session[sesMyObject] = value;

короче, проще для чтения и должен иметь немного лучшую производительность, но если этот код не повторяется очень много раз подряд, это не должно иметь значения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top