指定されたドメインからユーザーのリストを取得する必要があるアプリケーションを作成しています。これでユーザーを取得できますが、特に大規模なドメインでこれをより速く行うにはどうすればよいですか?
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 を取得しています。私はそれを行ったので、一度にいくつかを段階的にロードして、残りがまだロードされている間にそれらをユーザーに表示しようとしましたが、その内部ループにヒットすると、数分間ハングします。
ドメイン\ユーザー名形式でもユーザー名を取得しようとしていますが、その方法もわかりません。