Самая быстрая .net структура данных для параллельного поиска - PullRequest
1 голос
/ 10 октября 2011

Допустим, у нас есть большой список элементов только для чтения (int, string).

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

Я знаю, что общий словарь быстрый, но, насколько я знаю, он использует только 1 процессор, а на современных компьютерах по крайней мере 2 процессора.

В качестве дополнительного вопроса: что было бы самым быстрым решением для поиска в этой коллекции по нескольким элементам? Например, collection.GetItems (new int [] {1,2,3,4}), где 1,2,3,4 - ключи.

Спасибо!

1 Ответ

2 голосов
/ 10 октября 2011

В словаре используются хеш-таблицы, которые должны быть преобразованы в O (1).Вычисление хэша на ключах должно быть очень быстрым, а поиск хеша - это прямое смещение памяти массива и, мы надеемся, обход очень короткой цепочки столкновений.

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

Я бы порекомендовал поддерживать словарь поиска и для каждого поиска.

Единственное соображение - это память.Словарь добавит объем памяти, чтобы сделать поиск быстрым - типичное пространство и время.

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

В этом случае я бы порекомендовал вам изучить параллельную библиотеку задач.Вот статья: http://www.codeproject.com/KB/cs/TPL1.aspx

...