문제

내 응용 프로그램 중 하나에서 Active Directory를 쿼리하여 특정 사용자 아래의 모든 사용자 목록을 가져옵니다 ( "직속보고"항목 사용).따라서 기본적으로 사람의 이름이 주어지면 AD에서 조회 한 다음 부하 직원을 읽습니다.그러나 모든 부하 직원에 대해 도구는 부하 직원의 부하 직원을 확인해야합니다.또는 좀 더 추상적 : 도구는 사람을 나무의 뿌리로 사용한 다음 전체 나무를 따라 내려가 모든 잎의 이름을 얻습니다 (수백 개가 될 수 있음)

이제 꽤 많은 작업을 수행해야하므로 당연히 성능이 우려됩니다.내 생각은 수동으로 캐시하는 것입니다 (본질적으로 모든 이름을 긴 문자열에 넣고 어딘가에 저장하고 하루에 한 번 업데이트).

하지만 System.DirectoryServices 네임 스페이스의 무언가를 사용하여 먼저 정보를 가져온 다음 캐시하는 더 우아한 방법이 있는지 궁금합니다.

도움이 되었습니까?

해결책

캐시하려는 속성을 제어하려면 'RefreshCache ()'를 호출하여 원하는 속성을 전달할 수 있습니다. 라코 디스

다른 팁

Active Directory는 정보를 저장하는 데 매우 효율적이며 검색이 성능에 큰 영향을 미치지 않아야합니다.이름을 저장하려는 의도가 있다면 모든 사람의 관계를 볼 수 있도록 일종의 나무 구조에 저장하고 싶을 것입니다.사람 수에 따라 매일 필요한 모든 정보를 가져온 다음 캐시 된 복사본에 대해 모든 요청을 쿼리하는 것이 좋습니다.

AD는 이러한 종류의 캐싱을 수행하므로 성능이 문제가되지 않는 한 걱정하지 마십시오.시간당 수천 번의 히트가 발생하고이 영역에서 성능을 조정할 필요가없는 회사 인트라넷에서 하루 종일 이런 종류의 작업을 수행하는 소프트웨어가 있습니다.

정보를 원하는 최신 정보에 따라 다릅니다.보고서에 최신 데이터가 필요한 경우 AD에서 직접 쿼리하는 것이 합리적입니다.그리고 저는 AD가 매우 강력하다는 데 동의합니다. 일반적인 전용 AD 서버는 실제로 일상적인 작업에서 매우 가볍게 사용되지만 IT 부서 / 지원 담당자에게 확인하는 것이 가장 좋습니다.

대안은 AD 데이터를 CSV 파일로 덤프하거나 SQL 데이터베이스로 가져 오는 일일 스크립트를 사용하는 것입니다.(Oracle에는 결과 집합 내에서 다중 수준 계층 구조를 자동으로 생성 할 수있는 SELECT CONNECT BY 기능이 있습니다. MSSQL은 약간의 재귀 IIRC를 사용하여 유사한 작업을 수행 할 수 있습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top