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