会话呼叫的开销

本文关键字:开销 呼叫 会话 | 更新日期: 2023-09-27 18:10:30

在页面属性中包装我的会话变量时,将值保存到本地变量并从那里调用值是否有意义?

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

假设我使用InProc会话模式而不是基于sql的,它是否会产生任何明显的差异,或者额外的保存和检查实际上会损害我的性能而不是帮助?

我应该做

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

会话呼叫的开销

使用本地变量/缓存会更高效,更适合将来使用。但是,除非你访问它几十次或几百次,否则差异不会很大。

我可以建议:

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

this是可选的,但这是一点整洁,再次只是IMO。

注意:很好地使用了合并运算符??,并且赋值表达式的result与被赋值的值相同。

我不认为有太大的区别,因为两者都是在服务器端执行的。

如果可能,我们应该避免使用Session本身。:)