Я отсортировал коллекцию (List), и мне нужно постоянно ее сортировать.
В настоящее время я использую List.BinarySearch в своей коллекции, а затем вставляю элемент в нужное место. Я также попробовал список сортировки после каждой вставки, но производительность неприемлема.
Есть ли решение, которое даст лучшую производительность? Может быть, я должен использовать другую коллекцию.
(Я знаю SortedList, но он ограничен уникальными ключами)
PowerCollections имеет тип OrderedBag
, который может быть хорош для того, что вам нужно. Из документов
Вставка, удаление и поиск все элементы выполняются в log (N) + M время, где N - количество ключей в дерево, а M - текущее число копий элемента, являющегося обрабатываются.
Однако для встроенных типов .NET 3.5 использование List.BinarySearch
и вставка каждого элемента в правильное место - это хороший старт, но он использует массив внутри, чтобы ваша производительность снижалась из-за всего копирования. делая, когда вы вставляете.
Если вы можете группировать свои вставки в партии, которые улучшат ситуацию, но если вы не сможете перейти только к одной операции сортировки после всей вашей вставки, вам, вероятно, лучше использовать OrderedBag
от PowerCollections
, если сможете.
Если вы используете .Net 4, вы можете использовать SortedSet<T>
http://msdn.microsoft.com/en-us/library/dd412070.aspx
Для .Net 3.5 и ниже, посмотрите, работает ли SortedList<TKey,TValue>
.
Попробуйте объединить вставки в партии и отсортировать только в конце каждой партии.