У меня есть большая коллекция строк (до 1M) в алфавитном порядке. Я экспериментировал с запросами LINQ против этой коллекции, используя HashSet, SortedDictionary и Dictionary. Я статический кеширование коллекции, размер до 50 МБ, и я всегда вызываю запрос LINQ к кешированной коллекции. Моя проблема заключается в следующем:Производительность 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, словарь и т.д. осуществлять поиски с использованием двоичного дерева поиска вместо стандартного перечисления. Каковы мои возможности для высокопроизводительных запросов LINQ в расширенные типы коллекций?
Отлично! Высокая производительность и то, что я искал. Вы бы рекомендовали этот метод (модифицированный, конечно), чтобы запрашивать свойства в коллекции нестроковых объектов? –
Да, вы можете сделать класс Index универсальным и использовать HashSet вместо List, тогда вы можете создавать индексы для разных свойств и пересекать HashSets, чтобы сузить элементы для поиска. – Guffa
Как насчет строк короче indexLength - Add() не будет их хранить, а Find() их не найдет? – Sam