У меня есть приложение, которое по существу принимает один список (представленный пользователем) и возвращает набор данных для каждого элемента в списке. Моя основная проблема заключается в том, что у меня есть большая коллекция, которую я сохранил в памяти, чтобы избежать необходимости запрашивать базу данных каждый раз, но мои запросы по-прежнему занимают почти 0,5 секунды, и это слишком долго.
Коллекция - почтовые индексы США и США и имеет почти 1 миллион записей. Список от пользователя - от нескольких десятков до нескольких тысяч записей, и мне нужно сделать это для каждого, поэтому он занимает много времени с большими списками. Вот запрос:
var resultList = PostalCodeList.Where(p => p.postalcode == userPostalCode).ToList();
В списке почтовых кодов также имеются другие соответствующие данные (страна, регион и т.д.), Которые также должны быть возвращены пользователю. Всего 5 полей. Все строки.
существует вероятность того, что данные организованы так, что для данного значения есть 2 результата, поэтому мне нужно учитывать это.
Любые идеи или предложения были бы замечательными. Благодарю!
Был ли запрос к повреждению базы данных, или вы кэшировали данные из страха перед БД? Если последнее, вы можете обнаружить, что отдельные запросы лучше подходят для ваших нужд и должны оптимизироваться только при запуске проблемы производительности базы данных.
Тем не менее, вы можете использовать ToList()
без необходимости. Если все, что вы делаете с результатом, это foreach
, то то, что вы сделали, перечисляет коллекцию дважды (один раз для ToList()
, второй для foreach
). Если возможно, удалите ToList()
и вместо этого работайте прямо с результатом Where()
. Если итерация вашего списка является основной накладной, вы должны найти, что это сокращает время поиска примерно в половине.
Помимо этого, как другие заявили в своих комментариях по вашему первоначальному вопросу, вы можете обнаружить, что переход на методологию, которая поддерживает быстрый поиск (то есть хешсет), является единственным способом полностью обойти время поиска O (n), с которым вы столкнетесь по мере роста коллекции.
Dictionary
для хранения информации (вместо списка).