У меня есть 2-мерный массив объектов (преимущественно, но не исключительно строк), которые я хочу фильтровать по строке (sSearch
) с использованием LINQ. Следующий запрос работает, но не так быстро, как хотелось бы.Оптимизация поиска двумерного массива с помощью LINQ
Я изменил Count
к Any
, что привело к значительному увеличению скорости и заменить Contains
регулярным выражением, которое игнорирует случай, тем самым elimiating вызов ToLower
. В сочетании это сократило вдвое время выполнения.
В настоящее время очень заметно, что увеличение длины поискового запроса от 1 до 2 букв утроит время выполнения, и есть еще один прыжок от 3 до 4 букв (~ 50% увеличение времени выполнения). Хотя это, конечно, не удивительно, интересно, есть ли что-то еще, что можно было бы сделать для оптимизации соответствия строк?
Regex rSearch = new Regex(sSearch, RegexOptions.IgnoreCase);
rawData.Where(row => row.Any(column => rSearch.IsMatch(column.ToString())));
В этом случае набор данных имеет около 10 k строк и столбцов 50, но размер может варьироваться в довольно значительной.
Любые предложения относительно того, как оптимизировать это, будут очень признательны.
Они * говорят * Сравнение с верхним числом оптимизировано ... – Dykam
Не могли бы вы рассказать нам больше о вашей проблеме (характер ваших данных, образец в sSearch ...)? Я думаю, что у нас слишком мало элементов, чтобы углубиться в оптимизацию ... – Roubachof