2013-05-22 2 views
0

이전 질문에서 말문을 열면 사람들이 응답하지 못했습니다. 아무리해도 나는 내가해야 할 일을 할 수있다. 궁극적 인 관심사는 어떤 옵션이 최적인가?어떤 종류의 컬렉션이 가장 좋습니까?

도메인의 전체 Active Directory를 탐색하여 사람/사용자별로 필터링하고 있습니다.

그런 다음이 정보를 컬렉션에 넣어야합니다.

나는 내가 Active Directory를가는 것은 그 자체 나 다른 지역에서 내 코드를 최적화하기 위해 찾고 있어요에 의해 속도가 느려질 수 있습니다 나는 더 최적의 방법을 찾고 있어요

List<Users> // Create a model with the information i need and populate it. 
Dictionary<string, List<Users>> // add a list of users to the string/department 
Dictionary<string, Users> // struct or class 
Lookup<string, Users> 

와 함께 할 수있어 .

부서를 한 번만 저장하면되며 각 부서마다 많은 사용자가있을 수 있습니다.

이 경우 가장 적합한 방법은 무엇입니까?

편집 추가 :

나는이 특정 코드가 결국 내용을 통해 루프에 저를 허용하고 드롭 다운 목록을 구축 할 것입니다 특정 페이지입니다 필요로하는 유일한 이유는. 이 코드는 다른 곳에서는 사용되지 않습니다.

+1

'which option is optimal'은 _correctly_로 대답 할 수 없으므로 stackoverflow에 대한 적절한 질문이 아닙니다. 주관적인 질문을 원하면 http://programmers.stackexchange.com/에서 요청하십시오. 코드를 개선하려면 http://codereview.stackexchange.com/에서 요청하십시오. –

+0

"최적"은 무엇입니까? 부서별 사용자 쿼리? 다른 필드로 사용자 쿼리? 당신은 실제로 무엇을하려고하고 있으며 병목 현상이 무엇이라고 생각하십니까? –

+0

@KirkWoll 내 답변을 편집했으나 읽지 않을 수도 있습니다. 나는 활성 디렉토리가 그 자체로 느리기 때문에 속도를 특별히 찾고있다. 어떤 식 으로든 코드의 다른 부분에서 가장 빠른 리소스를 사용하여 더 나은 것을 보상 할 수 있습니다. 각 컬렉션이 다른 컬렉션보다 빠르거나 느린 특정 작업을 수행 할 수 있음을 알고 있습니다. 이 콜렉션을 반복하면서 부서의 부서원과 각 사용자를 붙잡아 부서별로 그룹화 된 드롭 다운 목록에 던져 넣어야합니다. –

답변

2

색인 또는 스캔을 통해 글을 쓰거나 액세스 할 때 목록이 더 빨라질 수 있습니다.

사전 (O (N) 또는 O (N) 대신 키 (O (1))을 사용하여 항목에 액세스 할 때 사전 속도가 빨라집니다.

모든 사용자를 드롭 다운 상자에 추가하려는 경우 List<User>으로 이동하십시오.

드롭 다운 상자에 모든 부서를 추가하고 해당 부서의 사용자를 다른 드롭 다운에 추가하려는 경우 Dictionary<Department, List<User>>을 사용하고 프로파일 링을 수행하여 별도의 부서 목록을 보유하고 있는지 확인하십시오.

페이지에 액세스 할 때마다 컬렉션을 다시 만들려면 어느 것이 더 효과적인지 보려면 realish 데이터로 프로파일 링해야합니다.

편집 : 더 나은 아직

class Department 
{ 
    public string Name {get;set;} 
    public List<User> Users {get;set;} 
} 

List<Department> departments; 

foo() 
{ 
    foreach(department in departments) 
    { 
     // emit optgroup 
     foreach(user in department.Users) 
     { 
      // emit option 
     } 
     // emit /optgroup 
    } 
} 

또는 같은 대한 결과 HTML을 캐시 방법 업데이트를 바탕으로 .

+0

감사합니다. Yaur. 정보에 액세스해야하는 경우 어떻게해야합니까? 하나의 단일 드롭 다운 목록을 만드십시오. 왜냐하면 부서가 필요할 것이기 때문에 드롭 다운 목록을 사용하는 사람들이 어떤 부서에 어떤 사용자가 있는지 쉽게 볼 수 있도록''를 사용할 것입니다. –

+0

@JamesWilson 업데이트 된 답변보기 – Yaur

+0

대단히 감사합니다. Yaur, 내가 추천 한대로 List 경로로 이동한다고 생각합니다. 나는 'ILookup'에 대한 정보를 찾아 보려고했지만 많은 행운을 찾지 못했습니다. 나는 목록을 훨씬 잘 이해한다. 결과를 캐싱하는 방법에 대한 정보도 찾아 볼 것입니다. 나는 이것이 내가하는 일에 유익 할 것이라고 생각합니다. 다시 감사합니다. –

관련 문제