我正在为我的一个网站使用 ASP.NET 会话状态服务器。我将一个用户对象放在会话中,因为它被大量使用。
请考虑以下代码片段:
DoSomething(SessionUser.Me.UserID)
DoSomeMore(SessionUser.Me.UserName)
SessionUser.Me 是一个静态属性,它只执行以下操作:
return (SessionUser)Session["currentuser"];
现在因为我访问 SessionUser.Me 2 次(DoSomething 和 DoSomeMore),.NET 是否足够聪明,不会对状态服务器进行 2 次往返并反序列化 2 次?
换句话说,如果我只是这样做,它在性能上是等效的:
var user = SessionUser.Me;
DoSomething(user.UserID)
DoSomeMore(user.UserName)
?
在请求管道的早期从状态服务器反序列化(请参阅 HttpApplication.AcquireRequestState,并在页面执行完成时写回状态服务器(请参阅 HttpApplication.ReleaseRequestState)。
因此,不应因重复访问而影响性能。