LINQ orderby по сравнению с IComparer

Я хотел бы знать то, что лучше для использования.

Класс IComparer и Сравнивает метод для вида или LINQ orderby в Списке. Оба хорошо работают, но какой лучше для больших списков.

13
задан Gordon Gustafson 31 July 2010 в 15:19
поделиться

3 ответа

Я бы выбрал LINQ по двум причинам.

Я бы ожидал, что производительность будет примерно такой же для однопоточной реализации, если учесть, что лямбда-выражение в вашем предложении OrderBy компилируется в функцию - а это практически все, что вы получаете, реализуя IComparer в любом случае.

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

10
ответ дан 2 December 2019 в 00:02
поделиться

Я думаю, что семантически они очень разные, интерфейс IComparer позволяет вам определять, как ваш тип сортируется естественным образом, OrderBy дает вам способ сортировать ваши объекты по определенному ключу, например учитывая список объектов Person, для запроса A отсортируйте список по имени, для запроса B отсортируйте список по возрасту.

LINQ дает вам больше гибкости, но поскольку OrderBy требует Func, который принимает ваш тип объекта и возвращает ключ для использования для сортировки, какой бы ключ вы ни вернули, все равно потребуется реализовать интерфейс IComparer.

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

2
ответ дан 2 December 2019 в 00:02
поделиться

Я предпочитаю использовать LINQ по умолчанию для всех операций на основе коллекции. Преимущество здесь в том, что мне не нужно слишком много полагаться на тип используемой коллекции (OrderBy работает с IEnumerable).

Если у вас есть IList , то List.Sort, вероятно, будет быстрее.

В любом случае, я бы не стал беспокоиться об этом, пока не обнаружится доказанная (т.е. измеренная) проблема производительности

4
ответ дан 2 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: