HttpContext用户和Thread用户之间的性能差异

时间:2012-12-18 17:02:08

标签: asp.net vb.net performance vb.net-2010

我想知道HttpContext.Current.User.Identity.Name.ToString.ToLowerThread.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

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

1 个答案:

答案 0 :(得分:0)

您的测试显示差异最多,但请注意SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle

另外,如果它代表了实际的代码,你真的需要一个Try..Catch吗?或者你可以使用首选的方法来测试Is Nothing在适当的实体上什么都不是?< / p>