2013-05-22 3 views
0

Формулировка в моем предыдущем вопросе помешала людям ответить на него. Независимо от того, что я могу сделать, что мне нужно делать. Моя последняя проблема заключается в том, какой вариант оптимален?Какой тип коллекции лучше?

Я просматриваю весь 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> 

Я более ищу оптимальный способ, как переход к Active Directory может быть медленными им самостоятельно, я ищу, чтобы оптимизировать свой код в других областях ,

Мне нужен только один отдел, который хранится один раз, и каждый отдел может иметь много разных пользователей.

Какой оптимальный способ выбрать в этом случае?

Редактировать Дополнение:

Единственная причина, мне нужно это специальный код для конкретной страницы, которая в конечном итоге позволит мне перебрать содержимое и строить из выпадающего списка. Этот код не будет использоваться где-либо еще.

+1

'какой вариант является оптимальным', скорее всего, не является подходящим вопросом для stackoverflow, поскольку на него невозможно ответить _correctly_. Если вы хотите задать субъективные вопросы, спросите его на http://programmers.stackexchange.com/. Если вы хотите улучшить свой код, попросите его на http://codereview.stackexchange.com/. –

+0

«Оптимальный» для чего? Запрос пользователей по отделам? Запрос пользователей другим полем? Что вы на самом деле пытаетесь сделать и какое узкое место вы считаете своим решением? –

+0

@KirkWoll Я отредактировал свой ответ, но, вероятно, не раньше, чем вы его прочитали. Я смотрю конкретно на скорость здесь, так как активный каталог медленный сам по себе. В любом случае я могу использовать самые быстрые ресурсы в других частях моего кода, чтобы компенсировать лучшее. Я знаю, что каждая коллекция может делать определенные вещи быстрее или медленнее, чем другие коллекции. Мне нужно будет пройти через эту коллекцию, захватив отдел и каждого пользователя в отделе и выбросив их в раскрывающийся список, сгруппированный по отделам. –

ответ

2

Список будет быстрее при записи или доступе по индексу или сканированию.

Словарь будет быстрее при доступе к элементу по его ключу (O (1) вместо O (N) или O (log N) в списке).

Если вы хотите добавить всех пользователей в раскрывающийся список, отправьте List<User>.

Если вы хотите добавить все отделы в раскрывающийся список и добавить пользователей из этого отдела в другое раскрывающееся меню, используйте Dictionary<Department, List<User>> и, возможно, выполните некоторые профилирования, чтобы узнать, имеет ли смысл иметь отдельный список отделов.

Если вы собираетесь воссоздавать коллекцию каждый раз, когда страница обращается к вам, вам нужно будет выполнить профилирование с помощью реальных данных, чтобы увидеть, какая из них работает лучше.

Edit: На основе вашего обновления, как о чем-то вроде

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

Спасибо Яуру, что, если мне нужно будет получить доступ к информации. Создайте один раскрывающийся список, понадобится отдел причин, я буду использовать '', чтобы люди, которые использовали раскрывающийся список, могли легко увидеть, какой пользователь находится в каком отделе. –

+0

@JamesWilson см. Обновленный ответ – Yaur

+0

Большое спасибо Яуру, я думаю, что пройду путь по списку, как вы рекомендовали. Я пытался найти информацию о 'ILookup', но не нашел большой удачи. Я понимаю списки намного лучше. Я также буду искать информацию о кешировании результатов, и я думаю, что это будет полезно для того, что я делаю. Еще раз спасибо. –

Смежные вопросы