1

我想知道HttpContext.Current.User.Identity.Name.ToString.ToLower和之间有什么区别Thread.CurrentPrincipal.Identity.Name.ToString.ToLower。这两种方法都在我的 asp.net 3.5 Web 服务中获取用户名。我决定使用一个小程序来弄清楚性能是否有任何差异。在每次运行中从完全停止运行到开始调试。

Dim st As DateTime = DateAndTime.Now
        Try
            'user = HttpContext.Current.User.Identity.Name.ToString.ToLower
            user = Thread.CurrentPrincipal.Identity.Name.ToString.ToLower
            Dim dif As TimeSpan = Now.Subtract(st)
            Dim break As String = "nothing"

        Catch ex As Exception
            user = "Undefined"
        End Try

我在 break 上设置了一个断点来读取dif. 两种方法的结果相同。

    dif.Milliseconds    0   Integer

    dif.Ticks           0   Long

使用更长的持续时间,循环 5,000 次会产生这些数字。

线程方法

        run 1
    dif.Milliseconds    125     Integer
    dif.Ticks           1250000 Long

        run 2 
    dif.Milliseconds    0   Integer
    dif.Ticks   0   Long

        run 3 
    dif.Milliseconds    0   Integer
    dif.Ticks   0   Long

HttpContext 方法

        run 1
    dif.Milliseconds    15  Integer
    dif.Ticks   156250  Long

        run 2
    dif.Milliseconds    156 Integer
    dif.Ticks   1562500 Long

        run 3
    dif.Milliseconds    0   Integer
    dif.Ticks   0   Long

所以我猜什么更受欢迎,或者更符合网络服务标准?如果有某种类型的性能优势,我真的不能说。哪一个更容易扩展到更大的环境?

4

1 回答 1

0

您的测试表明差异最多是微不足道的,但请注意SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle

此外,如果这代表实际代码,您真的需要 Try..Catch 还是可以使用首选方法来测试Is Nothing可能什么都不是的适当实体?

于 2012-12-18T20:24:43.027 回答