sourcecode

디렉터리 검색기에서 1000개 이상의 레코드를 가져올 수 있습니까?

copyscript 2023. 6. 13. 22:31
반응형

디렉터리 검색기에서 1000개 이상의 레코드를 가져올 수 있습니까?

저는 방금 결과에 대한 반품 리스트가 1000개로 제한되어 있다는 것을 알았습니다.도메인(HUGE 도메인)에 1000개 이상의 그룹이 있습니다.어떻게 하면 1000개 이상의 레코드를 얻을 수 있습니까?나중의 기록부터 시작해도 될까요?여러 검색으로 나눌 수 있습니까?

제 질문은 다음과 같습니다.

DirectoryEntry dirEnt = new DirectoryEntry("LDAP://dhuba1kwtn004");
string[] loadProps = new string[] { "cn", "samaccountname", "name", "distinguishedname" };
DirectorySearcher srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps);
var results = srch.FindAll();

srch를 설정하려고 했습니다.SizeLimit = 2000;이지만 작동하지 않는 것 같습니다.아이디어 있어요?

디렉토리 검색기를 설정해야 합니다.모든 결과를 가져오려면 PageSize를 0이 아닌 값으로 설정합니다.

그나저나 디렉터리 검색기를 다 사용한 후에도 삭제해야 합니다.

using(var srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps))
{
    srch.PageSize = 1000;
    var results = srch.FindAll();
}

API 설명서는 명확하지 않지만 본질적으로 다음과 같습니다.

  • 페이징된 검색을 수행하면 크기 제한이 무시되고 FindAll에서 반환된 결과를 반복하면 일치하는 모든 결과가 반환됩니다.결과는 서버에서 한 번에 한 페이지씩 검색됩니다.위의 값 1000을 선택했지만, 원하는 경우 더 작은 값을 사용할 수 있습니다.단점은 작은 페이지 크기를 사용하면 각 페이지의 결과가 더 빨리 반환되지만 많은 결과를 반복할 때 서버에 더 자주 호출해야 한다는 것입니다.

  • 기본적으로 검색은 페이징되지 않습니다(페이지 크기 = 0).이 경우 최대 SizeLimit 결과가 반환됩니다.

Biri가 지적했듯이 FindAll에서 반환한 SearchResultCollection을 폐기하는 것이 중요합니다. 그렇지 않으면 DirectorySearcher용 MSDN 문서의 비고 섹션에 설명된 대로 메모리 누수가 발생할 수 있습니다.모두 찾기.

.NET 2.0 이상에서 이 문제를 방지하는 한 가지 방법은 자동으로 SearchResultCollection을 처리하는 래퍼 메서드를 작성하는 것입니다.이것은 다음과 같이 보일 수 있습니다(또는 .NET 3.5의 확장 방법일 수도 있습니다).

public IEnumerable<SearchResult> SafeFindAll(DirectorySearcher searcher)
{
    using(SearchResultCollection results = searcher.FindAll())
    {
        foreach (SearchResult result in results)
        {
            yield return result;        
        } 
    } // SearchResultCollection will be disposed here
}

그런 다음 다음과 같이 사용할 수 있습니다.

using(var srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps))
{
    srch.PageSize = 1000;
    var results = SafeFindAll(srch);
}

언급URL : https://stackoverflow.com/questions/90652/can-i-get-more-than-1000-records-from-a-directorysearcher

반응형