会话通话费用?

时间:2011-10-06 12:14:08

标签: c# .net asp.net performance session

在页面属性中包装Session变量时,将值保存到局部变量并且更喜欢从那里调用值是否有意义?

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

2 个答案:

答案 0 :(得分:1)

使用本地变量/缓存将更有效,面向未来。但是,除非您访问IMO几十次或几百次,否则差异不会很大。

我可以建议:

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

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

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

答案 1 :(得分:0)

我不认为我们可以找到很多不同,因为两者都在服务器端执行。

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