Это:
Box boxToFind = AllBoxes.FirstOrDefault(box => box.BoxNumber == boxToMatchTo.BagNumber);
Быстрее или медленнее, чем это:
Box boxToFind ;
foreach (Box box in AllBoxes)
{
if (box.BoxNumber == boxToMatchTo.BoxNumber)
{
boxToFind = box;
}
}
Оба дают мне результат, который я ищу (boxToFind
). Это собирается работать на мобильном устройстве, из которого я должен быть производительностью, добросовестной.
Он должен быть примерно таким же, за исключением того, что вам нужно позвонить Первый
(или, в соответствии с вашим кодом, Последний
) , а не , где
.
Вызов , где
предоставит вам набор совпадающих элементов ( IEnumerable
); вам нужен только один подходящий элемент.
Как правило, при использовании LINQ необходимо помнить об отложенном выполнении. В вашем конкретном случае это не имеет значения, поскольку вы получаете один предмет.
Самый быстрый - при использовании цикла for. Но разница настолько мала, что вы ее игнорируете. Это будет иметь значение только в том случае, если вы создаете приложение реального времени, но тогда для этих приложений, возможно, C # в любом случае не лучший выбор!
Если AllBoxes является объектом IQueryable, он может быть быстрее цикла, поскольку запрашиваемый объект может иметь оптимизированную реализацию операции Where (например, индексированный доступ).
Разница не важна, если только вы не определили, что этот конкретный цикл является узким местом в производительности с помощью профилирования.
Если профилирование действительно выявило проблему, то вам следует рассмотреть альтернативные способы хранения данных. Храните данные в словаре, который обеспечивает более быстрый поиск, чем циклический просмотр массива.
Микро оптимизация убьет вас.
Сначала закончите весь класс, затем, если у вас возникли проблемы с производительностью, запустите профилировщик и проверьте горячие точки приложения.
Убедитесь, что вы используете лучшие алгоритмы, затем перейдите к микрооптимизации, например, такой.
В случае, если вы уже это сделали:
Slow -> Fast
LINQ < foreach < for < unsafe for (Последний вариант не рекомендуется).
Абстракции сделают ваш код медленнее в 95% случаев.
Если вам нужна микрооптимизация, LINQ работает хуже, это всего лишь одна статья , вы можете найти много других сообщений.