我正在使用带有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 :(得分:3)
无法准确测量运行探查器所需的时间。
仅在与其他方法的所有时间相比时才有用。
使用秒表作为计时器运行调用,无需调试信息/附加调试器,并启用优化。
修改强>
我的代码在连接分析器(10秒)与NGEN'd应用程序(0.1秒)时的运行时间大约长100倍。