我正在将GetTokenInformationTokenGroups标志一起使用,以检索特定令牌所属的所有组。然后,我遍历返回的每个SID,并使用LookupAccountSid来获取用户名和域。我两次调用LookupAccountSid:第一次获取名称和域字符数组的大小,第二次填充分配的StringBuilder

我的延迟很长。我已经运行ANTS来查看问题所在,并发现如果用户属于23个组,则整个序列将花费15秒!探查器指向LookupAccountSid的第一次调用,并指出它平均每次调用652 ms。

呼叫看起来像这样:

            LookupAccountSid(null, tokenGroups.Groups[i].SID, null, ref accountCount, null,
                             ref domainCount, out snu);


在此调用之前,accountCountdomainCount初始化为0。最终,通话仍然有效,但是这种延迟很长。我究竟做错了什么?

最佳答案

运行探查器时,无法准确测量所花费的时间。

仅在与所有其他方法进行比较时才有用。

使用秒表作为计时器运行呼叫,而无需调试信息/不连接调试器,并且打开了优化功能。

编辑:

与附加的探查器(0.1秒)相比,连接探查器(10秒)时,我的代码运行时间大约长100倍。

关于c# - LookupAccountSid每次通话耗时+600毫秒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3601100/

10-10 19:20