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

では、どちらがより好ましいか、または Web サービス標準により準拠していると思いますか? なんらかのパフォーマンス上の利点がある場合、私にはわかりません。より大規模な環境に簡単にスケーリングできるのはどれですか?

4

1 に答える 1

0

あなたのテストは、違いがせいぜいごくわずかであることを示していますが、SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtleに注意してください

また、それが実際のコードの代表である場合、本当に Try..Catch が必要ですか、それともIs Nothing適切なエンティティをテストするための推奨される方法を使用できますか?

于 2012-12-18T20:24:43.027 に答える