Si la performance est en question, il est cependant probablement pas le goulot d'étranglement, avez-vous envisagé d'utiliser la bibliothèque parallèle ou PLINQ? voir ci-dessous:
Parallel.ForEach(Collection, obj =>
{
if (obj.Mandatory)
{
DoWork();
}
});
http://msdn.microsoft.com/en-us/library/dd460688(v=vs.110).aspx
En outre, bien qu'il semble peut-être un peu sans rapport comme si la performance jette un œil votre curiosité, si vous faites affaire avec des ensembles de données très volumineux, une recherche binaire peut être utile. Dans mon cas, j'ai deux listes de données distinctes. Je dois traiter avec des listes de millions d'enregistrements et cela m'a sauvé littéralement une quantité exponentielle de temps par exécution. Le seul inconvénient est qu'il est seulement utile pour les très grandes collections et doit être trié à l'avance. Vous remarquerez également que cela fait usage de la classe ConcurrentDictionary, qui fournit un surdébit significatif, mais elle est thread-safe et était nécessaire en raison des exigences et du nombre de threads que je gère de manière asynchrone.
private ConcurrentDictionary<string, string> items;
private List<string> HashedListSource { get; set; }
private List<string> HashedListTarget { get; set; }
this.HashedListTarget.Sort();
this.items.OrderBy(x => x.Value);
private void SetDifferences()
{
for (int i = 0; i < this.HashedListSource.Count; i++)
{
if (this.HashedListTarget.BinarySearch(this.HashedListSource[i]) < 0)
{
this.Mismatch.Add(items.ElementAt(i).Key);
}
}
}
Cette image a été publiée dans un article trouvé ici: http://letsalgorithm.blogspot.com/2012/02/intersecting-two-sorted-integer-arrays.html
Hope this helps!
Pourquoi ne pas mesurer et découvrir? – Brian
@Brian - ce n'est pas vraiment une attitude accueillante. –
Je voulais juste l'éteindre et voir ce que les gens pensent. Merci quand même. –