2009-09-04 5 views
1

내가 가지고있는 사용자의 SID에서 사용자의 Active Directory하여 DirectoryEntry 개체를로드 다음 코드 :이 작업을 수행하는보다 효율적인 방법이사용자의 DirectoryEntry를로드하는 가장 효율적인 방법은 무엇입니까?

public static DirectoryEntry GetUserDirectoryEntry(SecurityIdentifier sid) 
{ 
    return new DirectoryEntry(string.Format("LDAP://<SID={0}>", sid.Value)); 
} 

있습니까? 성능 문제로 인해 코드를 최적화해야하므로 최대한 빠른 코드로 압축해야합니다. 반드시 SID에서로드 할 필요는 없습니다. 난 단지 DirectoryEntry 사용자를 얻는 가장 효율적인 방법을 알아야합니다.

편집 : .Net 2.0을 사용하는 것으로 제한됩니다.

답변

1

나는 당신이 당신하여 DirectoryEntry를로드하는 방법에 큰 차이하게 생각하지 않는다 - 여부 SID 또는 완전한 DN으로는 - 그것은 단지

를 작동하도록 AD 바인드 작업에 설정된 시간을 소요 실제로 DirectoryEntry를 인스턴스화 할 때 바인드가 발생하지 않습니다. DirectoryEntry에서 속성을 사용하거나 .NativeObject 속성에 액세스 할 때까지 지연됩니다.

그래서 어떤 방식 으로든 상관 없습니다. 고유 한 식별 값을 기반으로 DirectoryEntry를 만드는 것은 시간이 걸릴 것입니다.

마크

1

더 많은 필터를 정의하고 사용자를 기준의 유형으로 지정해야합니다.

+0

내가 검색을 수행하고 있지 않다 :

은 보라. 디렉토리 검색기 클래스를 사용하는 것이 더 효율적이라고 말하는 것입니까? –

+0

검색을 통해 LDAP 쿼리 (AD 검색)를 사용하고 있음을 의미합니다. 실행하는 모든 LDAP 쿼리는 검색으로 간주됩니다. –

2

디렉터리 작업은 디렉터리의 개체에 액세스하는 방법에 관계없이 상당히 느립니다. 컨텍스트가 없으면보다 효율적인 방법을 권장하기는 어렵지만 일반적으로 한 번에 여러 사용자 집합과 멀티 스레딩 및 캐싱을 고려하여 문제를 해결할 생각입니까?

또한 더 효율적이라고 말할 수는 없지만 .NET 3.5에서 새로운 System.DirectoryServices.AccountManagement 네임 스페이스를 사용해 보셨습니까? 누구나 에 최적화되어 있다면, Microsoft가 될 것입니다. 그러나 우리는 전에 모두 실망 시켰습니다.

+0

나는 .Net 2.0 사용에 제한된다는 것을 추가하기 위해 질문을 편집했다. 또한 한 번에 한 명의 사용자 만 끌어 와야합니다. –

1

무엇 System.DirectoryServices.Protocols 네임 스페이스에 대해. ADSI를 사용하는 오버 헤드가 없으며 훨씬 빨라야합니다. 처음에는 다루기가 힘들어 보이지만 일단 익숙해지면 나쁘지 않습니다. 또한 적절한 비동기 검색을 수행 할 수 있습니다.

관련 문제