我正在将GetTokenInformation
与TokenGroups
标志一起使用,以检索特定令牌所属的所有组。然后,我遍历返回的每个SID,并使用LookupAccountSid
来获取用户名和域。我两次调用LookupAccountSid
:第一次获取名称和域字符数组的大小,第二次填充分配的StringBuilder
。
我的延迟很长。我已经运行ANTS来查看问题所在,并发现如果用户属于23个组,则整个序列将花费15秒!探查器指向LookupAccountSid的第一次调用,并指出它平均每次调用652 ms。
呼叫看起来像这样:
LookupAccountSid(null, tokenGroups.Groups[i].SID, null, ref accountCount, null,
ref domainCount, out snu);
在此调用之前,
accountCount
和domainCount
初始化为0。最终,通话仍然有效,但是这种延迟很长。我究竟做错了什么? 最佳答案
运行探查器时,无法准确测量所花费的时间。
仅在与所有其他方法进行比较时才有用。
使用秒表作为计时器运行呼叫,而无需调试信息/不连接调试器,并且打开了优化功能。
编辑:
与附加的探查器(0.1秒)相比,连接探查器(10秒)时,我的代码运行时间大约长100倍。
关于c# - LookupAccountSid每次通话耗时+600毫秒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3601100/