У меня есть большая коллекция строк (до 1 М) в алфавитном порядке. Я экспериментировал с запросами LINQ против этой коллекции, используя HashSet, SortedDictionary и Dictionary. Я статический кеширование коллекции, размер до 50 МБ, и я всегда вызываю запрос LINQ к кешированной коллекции. Моя проблема такова:
Независимо от типа сбора, производительность намного хуже, чем SQL (до 200 мс). При выполнении аналогичного запроса с базовыми таблицами SQL производительность намного быстрее (5-10 мс). Я выполнил свои запросы LINQ следующим образом:
public static string ReturnSomething(string query, int limit)
{
StringBuilder sb = new StringBuilder();
foreach (var stringitem in MyCollection.Where(
x => x.StartsWith(query) && x.Length > q.Length).Take(limit))
{
sb.Append(stringitem);
}
return sb.ToString();
}
Я понимаю, что HashSet, Dictionary и т.д. реализуют поиск с использованием поиска двоичного дерева вместо стандартного перечисления. Каковы мои возможности для высокопроизводительных запросов LINQ в расширенные типы коллекций?