会话呼叫的开销
本文关键字:开销 呼叫 会话 | 更新日期: 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本身。:)