Стоимость сеансового вызова? - PullRequest
0 голосов
/ 06 октября 2011

Оборачивая переменные Session в свойства страницы, имеет ли смысл сохранять значение в локальной переменной и предпочитать вызывать его оттуда?

private Foo MySessionFoo
{
    get
    {
        if (_localFoo == null)
            _localFoo = Session["MySessionFoo"] as Foo;
        return _localFoo;
    }
    set
    {
        Session["MySessionFoo"] = _localFoo = value;
    }
}

Предполагается, что я использую InProc Session Mode, а неОснованный на SQL, имеет ли это какое-то заметное значение или дополнительное сохранение и проверка действительно ухудшают мою производительность, а не помогают?

Стоит ли делать

private Foo MySessionFoo
{
    get
    {
        return Session["MySessionFoo"] as Foo;
    }
    set
    {
        Session["MySessionFoo"] = value;
    }
}

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Будет более эффективно и перспективно использовать локальную переменную / кеширование. Однако, различие не будет огромным, если вы не получите к нему доступ, например, в десятки или сотни раз IMO.

Могу ли я предложить:

return this._localFoo ?? (this._localFoo = Session["MySessionFoo"] as Foo);

this является необязательным, но это немного аккуратнее, опять же только IMO.

Примечание: хорошее использование оператора coalesce ?? и тот факт, что result выражения присваивания совпадает с присваиваемым значением.

0 голосов
/ 06 октября 2011

Я не думаю, что есть большая разница, которую мы можем найти, поскольку оба выполняются на стороне сервера.

Если возможно, нам следует избегать использования самой сессии. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...