2009-02-04 3 views
3

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

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

У меня есть Session.Remove там в основном потому, что мне становится лучше (OCD я знаю), и заставляет меня чувствовать, что сеанс чище, но я хотел бы знать, если он не нужен.

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

EDIT в ответах ниже я изменил свои свойства на следующее:

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

спасибо!

ответ

2

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

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

Кроме этого,

Session[sesMyObject] = value 

в значительной степени так же, как

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

Это слишком много. Отсносящийся MSDN

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

1
Session[sesMyObject] = value; 

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

Смежные вопросы