System.Environment.UserName在内部调用
[DllImport(“advapi32.dll”,CharSet = CharSet.Auto)] 内部静态extern bool GetUserName(StringBuilder lpBuffer,ref int nSize);
每次通话似乎都会达到AD,因此网络延迟和AD查询会影响执行速度。
您是否知道是否有更好的方法来检索此值?
线程上某处的缓存SID可能是什么? 所以我可以阅读UserName& SID并在本地缓存这些(在执行时)并且只在我获得新的SID(或沿着这些行的某些内容)时查询System.Environment.UserName。
谢谢,
答案 0 :(得分:1)
检索用户的WindowsIdentity。 Name属性检索Domain \ Name和User.Value SID。
System.Security.Principal.WindowsIdentity.GetCurrent()
答案 1 :(得分:0)
我不知道这是否符合您的需求,但也许:
System.Environment.GetEnvironmentVariable("username");
答案 2 :(得分:0)
代码吼叫似乎可以解决问题。
如果尚未设置,首先获取线程上的当前主体。 每次下次使用它时,都会给线程本身增加很小的开销,但每次都不会调用AD。
有什么想法吗?
if (!System.Threading.Thread.CurrentPrincipal.Identity.IsAuthenticated )
System.Threading.Thread.CurrentPrincipal =
new System.Security.Principal.WindowsPrincipal(
System.Security.Principal.WindowsIdentity.GetCurrent());
userName = System.Threading.Thread.CurrentPrincipal.Identity.Name;