Это точно OrderedDictionary в PowerCollections. Он в значительной степени идентичен SortedDictionary (красно-черное дерево с шаблонами) с добавлением возможности установки ключа начала / конца и сканирования всех значений в этом диапазоне.
SortedDicionary позволяет только выставлять функцию GetEnumerator (), которая запускается в начале коллекции и разрешает только вызов MoveNext (), поэтому даже если вы используете LINQ, ничего волшебного не происходит: она запускается в начале и выполняет ваше выражение на каждом узле по порядку, пока он не найдет те, которые соответствуют вашему выражению LINQ.
OrderedDictionary имеет функцию, которая получает перечислитель в или перед конкретным ключом и выполняет поиск в O (log n).
Однако следует предостеречь: перечислитель в PowerCollections OrderedDictionary реализован с использованием «yield», а производительность использования и перечисления памяти составляет не менее O (n ^ 2) ... вы можете изменить реализацию самостоятельно, чтобы она реализовывалась традиционный счетчик и обе эти проблемы исчезают. Я отправлю этот патч в Codeplex, если найду время.