我正在編寫一個應用程序,需要從指定的域中獲取用戶列表。我現在可以獲得用戶,但是這是一種減慢速度的方法,尤其是在較大的域名上,我該如何更快地做到這一點?獲取Active Directory中的用戶列表
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain))
{
UserPrincipal userPrincipal = new UserPrincipal(pc);
PrincipalSearcher search = new PrincipalSearcher(userPrincipal);
PrincipalSearchResult<Principal> results = search.FindAll();
foreach (var principals in results.Partition(20))
{
IDictionary<string, string> users = new Dictionary<string, string>(20);
foreach (UserPrincipal principal in principals.Cast<UserPrincipal>())
{
users.Add(principal.SamAccountName, principal.DisplayName);
}
yield return users;
}
}
基本上在外foreach循環我得到的IEnumerable的IEnumerable>。我這樣做,所以我可以嘗試逐漸加載一些,並將其顯示給用戶,而其餘的仍在加載,但是一旦我打到內部循環,我會有幾分鐘的掛起。
我想獲得域\用戶名格式的用戶名,以及我還沒有想出如何做。
我用你的方法,並將Asynchronous屬性設置爲true,現在加載速度更快。謝謝。 – twreid
不客氣。 – Daro
@twreid你只是設置Asynchronous = true,但沒有使用異步或任務? –