在页面属性中包装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;
}
}
答案 0 :(得分:1)
使用本地变量/缓存将更有效,面向未来。但是,除非您访问IMO几十次或几百次,否则差异不会很大。
我可以建议:
return this._localFoo ?? (this._localFoo = Session["MySessionFoo"] as Foo);
this
是可选的,但这有点整洁,再次只是IMO。
注意:很好地使用了合并运算符??
,并且赋值表达式的result
与赋值的值相同。
答案 1 :(得分:0)
我不认为我们可以找到很多不同,因为两者都在服务器端执行。
如果可能,我们应该避免使用Session本身。 :)