C# LookupAccountSid-taking+;每次通话600毫秒
我使用C# LookupAccountSid-taking+;每次通话600毫秒,c#,winapi,pinvoke,C#,Winapi,Pinvoke,我使用GetTokenInformation和TokenGroups标志来检索特定令牌所属的所有组。然后我循环遍历每个返回的SID,并使用LookupAccountSid获取用户名和域。我调用LookupAccountSid两次:第一次获取名称和域字符数组的大小,第二次填充分配的StringBuilders 我被耽搁了很长时间。我运行了ANTS来查看问题所在,发现如果用户是23个组的一部分,那么整个序列将花费15秒!探查器指向LookupAccountSid的第一个调用,并指出每个调用平均652
GetTokenInformation
和TokenGroups
标志来检索特定令牌所属的所有组。然后我循环遍历每个返回的SID,并使用LookupAccountSid
获取用户名和域。我调用LookupAccountSid
两次:第一次获取名称和域字符数组的大小,第二次填充分配的StringBuilder
s
我被耽搁了很长时间。我运行了ANTS来查看问题所在,发现如果用户是23个组的一部分,那么整个序列将花费15秒!探查器指向LookupAccountSid的第一个调用,并指出每个调用平均652毫秒
这是呼叫的样子:
LookupAccountSid(null, tokenGroups.Groups[i].SID, null, ref accountCount, null,
ref domainCount, out snu);
accountCount
和domainCount
在此调用之前初始化为0。最后,通话正常,但这种延迟太长了。我做错了什么?运行探查器时,不可能准确测量所用的时间
只有与所有其他方法相比,它才有用
使用秒表作为计时器运行调用,无需调试信息/附加调试器,并启用优化
编辑:
我的代码在连接探查器(10秒)和NGEN的应用程序(0.1秒)时运行的时间大约是前者的100倍 我猜网络延迟与域控制器或DC本身通信。这个问题实际上是由其他东西解决的,我想,因为探查器减慢了速度,所以bug仍然在四处蔓延。现在执行大约需要1-2毫秒!谢谢你帮助我克服我的无知。:)