LookupAccountSid每次通话占用+600 ms

时间:2010-08-30 14:09:40

标签: c# winapi pinvoke

我正在使用带有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);
在此次调用之前,

accountCountdomainCount被初始化为0。最后呼叫正在进行,但这种延迟是很长的。我做错了什么?

1 个答案:

答案 0 :(得分:3)

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

仅在与其他方法的所有时间相比时才有用。

使用秒表作为计时器运行调用,无需调试信息/附加调试器,并启用优化。

修改

我的代码在连接分析器(10秒)与NGEN'd应用程序(0.1秒)时的运行时间大约长100倍。