Проблема:
У меня есть текстовый файл вокруг 120 000 пользователей (строк), которые я хотел бы сохранить в коллекции, а затем выполнить поиск в этой коллекции.
Метод поиска будет возникать каждый раз, когда пользователь меняет текст TextBox
, и результатом должны быть строки, в которых содержит текст в TextBox
.
Мне не нужно менять список, просто вытащите результаты и поместите их в ListBox
.
Что я пробовал до сих пор:
Я попробовал с двумя разными коллекциями/контейнерами, которые я сбрасываю строковые записи из внешнего текстового файла (раз, разумеется):
-
List<string> allUsers;
-
HashSet<string> allUsers;
Со следующим запросом LINQ:
allUsers.Where(item => item.Contains(textBox_search.Text)).ToList();
Событие поиска (срабатывает, когда пользователь меняет текст поиска):
private void textBox_search_TextChanged(object sender, EventArgs e)
{
if (textBox_search.Text.Length > 2)
{
listBox_choices.DataSource = allUsers.Where(item => item.Contains(textBox_search.Text)).ToList();
}
else
{
listBox_choices.DataSource = null;
}
}
Результаты:
Оба дали мне плохое время отклика (около 1-3 секунд между каждым нажатием клавиши).
Вопрос:
Как вы думаете, где мое узкое место? Коллекция, которую я использовал? Метод поиска? Оба?
Как я могу получить лучшую производительность и более свободную функциональность?