самый быстрый способ поиска в огромном списке больших текстов.

У меня есть приложение для Windows, написанное на C #, которому необходимо загрузить 250 000 строк из базы данных и предоставить функцию «поиск по мере ввода», что означает, что как только пользователь вводит что-то в тексте Приложению необходимо выполнить поиск во всех 250 000 записей (которые, кстати, представляют собой один столбец с 1000 символами в каждой строке), используя поиск , например , и отобразить найденные записи.

Я использовал следующий подход:

1- Приложение загружает все записи в типизированный List

while (objSQLReader.Read())
{
    lstEmployees.Add(new EmployeesData(
        Convert.ToInt32(objSQLReader.GetString(0)),
        objSQLReader.GetString(1), 
        objSQLReader.GetString(2)));
}

2- В событии TextChanged, используя LINQ , я выполняю поиск (с комбинацией регулярных выражений) и присоедините IEnumerable к ListView, который находится в виртуальном режиме.

String strPattern = "(?=.*wood*)(?=.*james*)";
    IEnumerable<EmployeesData> lstFoundItems = from objEmployee in lstEmployees
    where Regex.IsMatch(Employee.SearchStr, strPattern, RegexOptions.IgnoreCase)
    select objEmployee;
    lstFoundEmployees = lstFoundItems;

3- Событие RetrieveVirtualItem обрабатывается для отображения элементов в ListView для отображения элемента.

e.Item = new ListViewItem(new String[] { 
    lstFoundEmployees.ElementAt(e.ItemIndex).DateProjectTaskClient, 
    e.ItemIndex.ToString() });

Хотя lstEmployees загружается относительно быстро (1,5 секунды) для загрузки списка из SQL Server, для поиска по TextChanged требуется более 7 минут для поиска с использованием LINQ. Поиск через SQL Server напрямую путем выполнения поиска LIKE занимает менее 7 секунд.

Что я здесь делаю не так? Как сделать этот поиск быстрее (не более 2 секунд)? Это требование моего клиента. Так что любая помощь приветствуется. Пожалуйста помоги...

6
задан Mike Nakis 6 January 2012 в 02:48
поделиться