J'ai Liste qui a 150K éléments. Le temps moyen de travail IndexOf() est 4 fois inférieur à Contient(). J'ai essayé d'utiliser List of int. Pour la liste des chaînes, IndexOf est un peu plus rapide.Pourquoi la liste <T> .IndexOf() beaucoup plus rapidement que la liste <T> .Contains()?
Je n'ai trouvé qu'une seule différence principale, c'est l'attribut TargetedPatchingOptOut. MSDN dit:
Indique que la méthode de bibliothèque de classes .NET Framework auquel cet attribut est appliqué est peu susceptible d'être affecté par entretien de presse, et est donc éligible à inline à travers les images de Native Image Generator (NGen).
Cet attribut peut-il être la cause d'un tel comportement? Et pourquoi la méthode Contient() n'a-t-elle pas un tel attribut?
Merci d'avance.
EDIT:
J'ai le code quelque chose comme ceci:
List<int> list = CommonHelper.GetRandomList(size);
long min = long.MaxValue;
long max = 0;
long sum = 0;
foreach (var i in list)
{
m_stopwatch.Reset();
m_stopwatch.Start();
list.Contains(i); // list.IndexOf(i);
m_stopwatch.Stop();
long ticks = m_stopwatch.ElapsedTicks;
if (ticks < min)
min = ticks;
if (ticks > max)
max = ticks;
sum += ticks;
}
long averageSum = sum/size;
EDIT 2:
J'ai écrit même code comme dans IndexOf() et il fonctionne plus lentement que Contient().
Qu'est-ce que les données contenues dans ce cas? –
Et non - Je ne pense pas que l'attribut ait quelque chose à voir avec ça. –
J'utilise int et string, le comportement est le même. –