【发布时间】:2011-03-22 17:40:31
【问题描述】:
System.Environment.UserName 内部调用
[DllImport("advapi32.dll", CharSet=CharSet.Auto)] internal static extern bool GetUserName(StringBuilder lpBuffer, ref int nSize);
每次调用似乎都会命中 AD,因此网络延迟和 AD 查询会影响执行速度。
您是否知道是否有更好的方法来检索此值?
可能是线程某处的缓存 SID 之类的东西? 所以我可以读取用户名和 SID 并在本地缓存它们(在执行时),并且只有在获得新的 SID(或类似的东西)时才查询 System.Environment.UserName。
谢谢,
【问题讨论】:
-
只是一个想法,也许有一种方法可以强制 Windows 服务器将 AD 的结果缓存一段时间?
-
也许我遗漏了一些明显的东西,但是为什么您在检索一次用户名后不自己缓存它们?
-
单例的诅咒 :( 用户名被放入每个日志条目中,其中我只有一个记录器实例在线程之间共享/在远程调用(模拟)等期间使用......