Linq Быстрее, Медленнее или то же?

Это:

Box boxToFind = AllBoxes.FirstOrDefault(box => box.BoxNumber == boxToMatchTo.BagNumber);

Быстрее или медленнее, чем это:

Box boxToFind ;
foreach (Box box in AllBoxes)
{
    if (box.BoxNumber == boxToMatchTo.BoxNumber)
    {
        boxToFind = box;
    }
}

Оба дают мне результат, который я ищу (boxToFind). Это собирается работать на мобильном устройстве, из которого я должен быть производительностью, добросовестной.

5
задан Eliran Malka 12 March 2015 в 09:47
поделиться

6 ответов

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

Как правило, при использовании LINQ необходимо помнить об отложенном выполнении. В вашем конкретном случае это не имеет значения, поскольку вы получаете один предмет.

8
ответ дан 18 December 2019 в 09:48
поделиться

Самый быстрый - при использовании цикла for. Но разница настолько мала, что вы ее игнорируете. Это будет иметь значение только в том случае, если вы создаете приложение реального времени, но тогда для этих приложений, возможно, C # в любом случае не лучший выбор!

0
ответ дан 18 December 2019 в 09:48
поделиться

Если AllBoxes является объектом IQueryable, он может быть быстрее цикла, поскольку запрашиваемый объект может иметь оптимизированную реализацию операции Where (например, индексированный доступ).

0
ответ дан 18 December 2019 в 09:48
поделиться

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

Если профилирование действительно выявило проблему, то вам следует рассмотреть альтернативные способы хранения данных. Храните данные в словаре, который обеспечивает более быстрый поиск, чем циклический просмотр массива.

8
ответ дан 18 December 2019 в 09:48
поделиться

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

В случае, если вы уже это сделали:
Slow -> Fast
LINQ < foreach < for < unsafe for (Последний вариант не рекомендуется).
Абстракции сделают ваш код медленнее в 95% случаев.

1
ответ дан 18 December 2019 в 09:48
поделиться

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

2
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

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