我正在编写一个需要从指定域获取用户列表的应用程序。我现在可以获得用户,但这是一种减慢速度的方式,尤其是在较大的域上,我怎样才能更快地做到这一点?
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。我这样做是为了尝试一次递增地加载一些并将它们显示给用户,而其余的仍在加载,但是一旦我点击了那个内部循环,我就会挂起几分钟。
我也在尝试以域\用户名格式获取用户名,但我还没有弄清楚该怎么做。