2010-08-30 118 views
2

我使用GetTokenInformationTokenGroups標誌檢索特定標記所屬的所有組。然後,我循環遍歷每個返回的SID並使用LookupAccountSid來獲取用戶名和域。我調用LookupAccountSid兩次:第一次獲取名稱和域字符數組的大小,第二次填充已分配的StringBuilder s。LookupAccountSid每次撥打+600毫秒

我得到很長時間的延遲。我運行了ANTS以查看問題是什麼,並發現如果用戶是23個組的一部分,則整個序列需要15秒!探查器指向LookupAccountSid的第一個調用,並指出每次調用平均爲652毫秒。

這是呼叫的樣子:

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

accountCountdomainCount是在此之前調用初始化爲0。最後,通話正在進行,但這種延遲時間很長。我究竟做錯了什麼?

+0

網絡延遲與域控制器或DC本身交談是我的猜測。 – 2010-08-30 14:32:34

回答

3

運行Profiler時無法準確測量所花費的時間。

僅當與其他方法的所有時間相比時纔有用。

使用Stopwatch作爲定時器運行調用,無需調試信息/附加調試器,並打開優化。

編輯:

我有一個運行更長的大約100倍時,分析器被連接(10秒)代碼VS NGEN'd應用程式(0.1秒)。

+0

謝謝。會做。 – 2010-08-30 14:14:47

+1

噢。問題實際上是由別的東西來解決的,我想,因爲剖析器正在放慢速度,這個錯誤還在蔓延。現在執行大約需要1-2毫秒!感謝幫助我瞭解我的無知。 :) – 2010-08-30 14:33:02