DirectorySearcher에서 1000 개 이상의 레코드를 가져올 수 있습니까?
결과에 대한 반환 목록이 1000 개로 제한되어 있습니다. 내 도메인 (거대한 도메인)에 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 을 설정하려고했습니다 . ,하지만 작동하지 않는 것 같습니다. 어떤 아이디어?
모든 결과를 얻으려면 DirectorySearcher.PageSize를 0이 아닌 값으로 설정해야합니다.
BTW 당신이 그것을 완료하면 DirectorySearcher도 폐기해야합니다
using(var srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps))
{
srch.PageSize = 1000;
var results = srch.FindAll();
}
API 문서는 명확하지 않지만 본질적으로 다음과 같습니다.
페이지 검색을 수행하면 SizeLimit이 무시되고 FindAll에서 반환 된 결과를 반복 할 때 일치하는 모든 결과가 반환됩니다. 결과는 한 번에 한 페이지 씩 서버에서 검색됩니다. 위에서 1000의 값을 선택했지만 원하는 경우 더 작은 값을 사용할 수 있습니다. 단점은 작은 PageSize를 사용하면 각 결과 페이지가 더 빨리 반환되지만 많은 수의 결과를 반복 할 때 서버를 더 자주 호출해야한다는 것입니다.
기본적으로 검색은 페이징되지 않습니다 (PageSize = 0). 이 경우 최대 SizeLimit 결과가 반환됩니다.
Biri가 지적했듯이 FindAll에서 반환 한 SearchResultCollection을 처리하는 것이 중요합니다. 그렇지 않으면 DirectorySearcher.FindAll에 대한 MSDN 설명서의 Remarks 섹션에 설명 된대로 메모리 누수가 발생할 수 있습니다 .
.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
'Programing' 카테고리의 다른 글
나노 편집기에서 X 행으로 이동 (0) | 2020.11.07 |
---|---|
내 고유 애플리케이션 내에서 Google Maps iPhone 애플리케이션을 시작하려면 어떻게해야합니까? (0) | 2020.11.07 |
저작권 정보에 대한 올바른 의미 태그-HTML5 (0) | 2020.11.07 |
QVector 대 QList (0) | 2020.11.07 |
Chrome의 HTML에서 Google 번역을 비활성화하는 방법 (0) | 2020.11.07 |