2

我支持一个遗留应用程序,我看到这样的代码:

'Use Session for everything?
If Session("UserType") = "Admin" Then
    'do admin something
ElseIf Session("UserType") = "Manager" Then
    'do manager stuff
ElseIf Session("UserType") = "User" Then
    'do regular stuff
Else
    'do anonymous stuff
End If

声明一个局部变量,将会话变量分配给局部变量,然后使用局部变量进行测试会更快更好地提高性能吗?

'Use local variable?
Dim UT As String = Session("UserType")
If UT = "Admin" Then
    'do admin something
ElseIf UT = "Manager" Then
    'do manager stuff
ElseIf UT = "User" Then
    'do regular stuff
Else
    'do anonymous stuff
End If

还是 IIS 为当前执行的代码检索到 Session 变量值后会自动缓存它吗?

4

1 回答 1

0

HttpApplication.PostAcquireRequestState 事件我们可以看到,当会话状态被获取时引发了一个事件:

在获得与当前请求关联的请求状态(例如会话状态)时发生。

ASP.NET 会话状态概述状态:

会话变量存储在通过 HttpContext.Session 属性公开的 SessionStateItemCollection 对象中。在 ASP.NET 页中,当前会话变量通过 Page 对象的 Session 属性公开。

将它们放在一起,我们可以推断出会话值不会在您每次使用它们时从请求中提取出来,这似乎是您关心的问题。将其称为缓存可能会将缓存的想法推得太远。

不是 IIS 处理所有这些:它是 ASP.NET。

关于您展示的代码,我个人更希望看到用 a 处理Select Case,但这取决于您。

于 2016-06-03T17:49:08.887 回答