Самый быстрый способ поиска в коллекции строк
:
у меня есть текстовый файл примерно 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 секунд между каждым нажатием клавиши).
вопрос:
как вы думаете, где мое узкое место? Коллекция, которую я использовал? Метод поиска? Как?
как я могу получить лучшую производительность и более гибкую функциональность?
Comments