Après avoir effectué quelques tests de mon côté, il semble que Hash-Dictionary gagne toujours. Il s'agit d'un objet Dictionary avec un HashCode, int32, comme clé
10 éléments 500 000 itérations
Nom du test Première Dernière Non trouvé Moyenne
TrouverDansListe 104,26 255,29 254,63 204,73
TrouverDansTableau 51,28 192,23 182,91 142,14
TrouverDansHashDict 56,3 54,38 51,16 53,95
TrouverDansDict 105,75 101,38 52,02 86,38
100 éléments 500 000 itérations
Nom du test Première Dernière Non trouvé Moyenne
TrouverDansListe 102,83 1873,45 1820,85 1265,71
TrouverDansTableau 56,21 1313,61 1310,65 893,49
TrouverDansHashDict 91,01 53,31 60,46 68,26
TrouverDansDict 119,01 101,65 100,11 106,92
Voici mon code qui effectue l'opération de recherche. Mes objets sont des tâches hiérarchiques qui seraient recherchées par un nom unique. Je sais que c'est un long post mais au cas où quelqu'un voudrait contester les conclusions, il peut voir le code.
private SearchResult TrouverDansDict()
{
SearchResult result = new SearchResult();
result.SeachType = "TrouverDansDict";
result.itterations = 1;
Stopwatch timer = new Stopwatch();
timer.Start();
if (dictStrBoundryTask.ContainsKey(NomDePremier))
{
TaskBase t = dictStrBoundryTask[NomDePremier];
}
timer.Stop();
result.firstItem = timer.Elapsed.TotalMilliseconds;
timer.Reset();
timer.Start();
if (dictStrBoundryTask.ContainsKey(NomDeDernier))
{
TaskBase t = dictStrBoundryTask[NomDeDernier];
}
timer.Stop();
result.lastItem = timer.Elapsed.TotalMilliseconds;
timer.Reset();
timer.Start();
if (dictStrBoundryTask.ContainsKey(NomDeNonTrouvé))
{
TaskBase t = dictStrBoundryTask[NomDeNonTrouvé];
}
timer.Stop();
result.notFoundItem = timer.Elapsed.TotalMilliseconds;
return result;
}
private SearchResult TrouverDansHashDict()
{
SearchResult result = new SearchResult();
result.SeachType = "TrouverDansHashDict";
result.itterations = 1;
Stopwatch timer = new Stopwatch();
timer.Start();
if (dictIntBoundryTask.ContainsKey(NomDePremier.GetHashCode()))
{
TaskBase t = dictIntBoundryTask[NomDePremier.GetHashCode()];
}
timer.Stop();
result.firstItem = timer.Elapsed.TotalMilliseconds;
timer.Reset();
timer.Start();
if (dictIntBoundryTask.ContainsKey(NomDeDernier.GetHashCode()))
{
TaskBase t = dictIntBoundryTask[NomDeDernier.GetHashCode()];
}
timer.Stop();
result.lastItem = timer.Elapsed.TotalMilliseconds;
timer.Reset();
timer.Start();
if (dictIntBoundryTask.ContainsKey(NomDeNonTrouvé.GetHashCode()))
{
TaskBase t = dictIntBoundryTask[NomDeNonTrouvé.GetHashCode()];
}
timer.Stop();
result.notFoundItem = timer.Elapsed.TotalMilliseconds;
return result;
}
private SearchResult TrouverDansTableau()
{
SearchResult result = new SearchResult();
result.SeachType = "TrouverDansTableau";
result.itterations = 1;
Stopwatch timer = new Stopwatch();
timer.Start();
foreach (TaskBase t in arrayBoundaryTask)
{
if (t.Name == NomDePremier)
{
break;
}
}
timer.Stop();
result.firstItem = timer.Elapsed.TotalMilliseconds;
timer.Reset();
timer.Start();
foreach (TaskBase t in arrayBoundaryTask)
{
if (t.Name == NomDeDernier)
{
break;
}
}
timer.Stop();
result.lastItem = timer.Elapsed.TotalMilliseconds;
timer.Reset();
timer.Start();
foreach (TaskBase t in arrayBoundaryTask)
{
if (t.Name == NomDeNonTrouvé)
{
break;
}
}
timer.Stop();
result.notFoundItem = timer.Elapsed.TotalMilliseconds;
return result;
}
private SearchResult TrouverDansListe()
{
SearchResult result = new SearchResult();
result.SeachType = "TrouverDansListe";
result.itterations = 1;
Stopwatch timer = new Stopwatch();
timer.Start();
TaskBase t = listBoundaryTask.Find(x => x.Name == NomDePremier);
if (t!=null)
{
}
timer.Stop();
result.firstItem = timer.Elapsed.TotalMilliseconds;
timer.Reset();
timer.Start();
t = listBoundaryTask.Find(x => x.Name == NomDeDernier);
if (t != null)
{
}
timer.Stop();
result.lastItem = timer.Elapsed.TotalMilliseconds;
timer.Reset();
timer.Start();
t = listBoundaryTask.Find(x => x.Name == NomDeNonTrouvé);
if (t != null)
{
}
timer.Stop();
result.notFoundItem = timer.Elapsed.TotalMilliseconds;
return result;
}