我想知道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
所以我想更喜欢什么,或者更符合网络服务标准?如果有某种类型的性能优势,我无法说出来。哪一个更容易扩展到更大的环境?
答案 0 :(得分:0)
您的测试显示差异最多,但请注意SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle
另外,如果它代表了实际的代码,你真的需要一个Try..Catch吗?或者你可以使用首选的方法来测试Is Nothing
在适当的实体上什么都不是?< / p>