나는 지정된 도메인에서 사용자 목록을 가져와야하는 응용 프로그램을 작성 중입니다. 지금 사용자를 확보 할 수는 있지만, 더 큰 도메인에서이 작업을 더 빠르게 수행하는 방법을 느리게하는 방법은 무엇입니까? 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을 얻고있다. 나는 한 번에 점진적으로 몇 개를로드하고 나머지는로드하는 동안 사용자에게 표시하도록 시도 할 수 있었지만 한 번 그 내부 루프를 쳤을 때 몇 분 정도 멈춰 버렸습니다.
domain \ username 형식의 사용자 이름을 얻으려고 시도하고 있는데 그 중 하나를 수행하는 방법을 찾지 못했습니다.
귀하의 방법을 사용하고 또한 비동기 속성을 true로 설정하면 더 빨리로드됩니다. 고맙습니다. – twreid
당신을 진심으로 환영합니다. – Daro
@twreid 비동기 = true로 설정했으나 비동기 또는 작업을 사용하지 않았습니까? –