SortedDictionary<K, V>
- это путь. Не только потому, что это правильная структура для вашего использования, но даже с точки зрения производительности и обслуживания, это будет только лучше.
Я просто хочу быстро вставки
Во втором случае вам придется вставить как в Dictionary<K, V>
, а также SortedSet<K>
. Это две вставки (одна O (1) и другая O (log n)). Я ожидал бы, что это будет медленнее, чем одиночная вставка в SortedDictionary<K, V>
(O (log n)).
SortedDictionary<K, V>
внутренне реализована как SortedSet<KeyValuePair<K, V>>
с сравнение делается на Key
части KeyValuePair<K, V>
. Поэтому, если вас устраивает производительность SortedSet<T>
, тогда не стоит оглядываться назад.
в SortedDictionary движется вокруг только ключи (двойные), или и ключи и значения
Это ясно микро-оптимизации. Это всего лишь вопрос перемещения нескольких лишних байтов, и это вряд ли имеет значение.
его непонятно, как отсортированныйdictionary внутренне реализован. Сортировка - это красно-черное дерево, которое является проверенным исполнителем.
SortedDictionary<K, V>
внутренне реализована как SortedSet<KeyValuePair<K, V>>
с сравнение делается на Key
части KeyValuePair<K, V>
. It is a red-black tree. Так что это доказанный исполнитель тоже ...
Также отметим, что SortedDictionary<K, V>
будет легче на память, а также приводит к более быстрому удалению, а также перечисление. Гибридный подход даст вам быстрый поиск, но он должен будет выполнить поиск каждого ключа в словаре для соответствующей части значения во время перечисления. Это будет медленнее.
Alert: я не читаю ваши комментарии, когда я писал выше !!
структура Я использую это своего рода тяжелый ~ 100 байт
Если вы можете изменить его в класс, сделать это. Перемещение около 100 байт не будет приятным , если ваше приложение имеет критическую критичность.
Я сделал быстрый и грязный Dictionary<K, V>
/SortedSet<K>
гибридной конструкции и протестировал его.
Действительно, это было быстрее для 100-байтовой структуры, когда дело дошло до ввода (более чем в два раза быстрее). Конечно, существует штраф (кто создал бы 100-байтовую структуру?).
Когда я изменил его на класс, они оба дали одинаковые показатели вставки.
Когда я уменьшил размер структуры, даже тогда производительность вставки была сопоставимой.
Таким образом, мое предложение переключается на класс и использует SortedDictionary<K, V>
. Если вы застряли со структурой, то Dictionary<K, V>
/SortedSet<K>
будет лучше. Хорошее q и +1.
Вы сделали какой-либо бенчмаркинг, чтобы узнать, какая из них лучше? –
Это звучит как микро-оптимизация. По логике, в сортированную структуру данных и несортированные данные потребуется больше времени. Я считаю, что производительность между вставкой в sorteddictionary vs sortedset должна быть одинаковой, поскольку они оба используют ключ того же типа для сортировки. Итак, вопрос в том, хотите ли вы 1 структуру или 2? – brcpar
Учитывая, что все, что вам нужно, это значения 'max', почему вам нужно отслеживать все предметы? – wdosanjos