Удаление и добавление накладных расходов из состояния сеанса
-
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;
короче, проще для чтения и должен иметь немного лучшую производительность, но если этот код не повторяется очень много раз подряд, это не должно иметь значения.