LINQ Performance pour les Grandes Collections

J'ai une grande collection de chaînes de caractères (jusqu'à 1M) triés par ordre alphabétique. J'ai expérimenté avec des requêtes LINQ contre cette collection à l'aide de HashSet, SortedDictionary, et le Dictionnaire. Je suis statique de la mise en cache de la collection, c'est jusqu'à 50 mo en taille, et je suis toujours à l'appel de la requête LINQ contre la mise en cache de la collection. Mon problème est comme suit:

Indépendamment du type de collection, les performances sont beaucoup plus pauvres que SQL (jusqu'à 200 ms). Lorsque vous faites une requête similaire contre le sous-jacent de tables SQL, la performance est beaucoup plus rapide ( 5-10ms). J'ai mis en œuvre mes requêtes LINQ comme suit:

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();
}

C'est ma compréhension que le HashSet, Dictionnaire, etc. mettre en œuvre des recherches à l'aide d'arbres binaires de recherche au lieu de la norme de l'énumération. Quelles sont mes options pour la haute performance des requêtes LINQ dans l'avancée des types de collection?

InformationsquelleAutor Peter J | 2009-03-25