1

у меня есть список улиц с указанием города (более 50к значений). Необходимо написать более быстрый метод фильтрации этого списка для последующей выдачи результатов пользователю. Сейчас у меня такой вариант:

var list = AddressList.Where(x=> x.Contains("Гагарина");

Работает не плохо, но может кто знает как можно делать это быстрее или проще ?

  • Пожалуйста, исправьте вопрос, чтобы он отражал конкретную проблему с достаточным количеством деталей для возможности дать адекватный ответ. – Дух сообщества Jun 20 '22 at 12:58
  • Проще вроде некуда. А вот быстрее - я бы попробовал разделить заранее адреса на части, чтобы проверять только улицу, например. Это явно будет быстрее, чем в целом адресе искать. Ну и там были нюансы ещё какие запросы выполняются на сервере, а какие на клиенте, может в эту сторону покопать. Так то для SQL сервера это не сложный совсем запрос же. – CrazyElf Jun 20 '22 at 14:57
  • Есть отличное решение вашей задачи - разделение коллекции на несколько частей и параллельная её обработка. Посмотрите вот этот вопрос https://ru.stackoverflow.com/q/1303748/378277. В заголовке представлен пример использования семафоров. Вам нужно лишь написать метод-таску, которая фильтрует данные по вашему условию. Так же, можно рассмотреть решение из вопроса по следующей ссылке https://codereview.stackexchange.com/a/32162. Насколько оно рабочее - сказать не могу. Так же, если вы работаете с БД при помощи EntityFramework, помните, что IQueryable обладает асинхронными методами – Frehzy Jun 20 '22 at 15:07
  • проще - никак. Быстрее возможно, если отказаться от списка и воспользоваться какой-нибудь другой структурой данных, например деревом – Grundy Jun 21 '22 at 06:14

0 Answers0