Если производительность под вопросом, это, вероятно, не является узким местом, однако, вы рассматривали возможность использования параллельной библиотеки или PLINQ? см. ниже:
Parallel.ForEach(Collection, obj =>
{
if (obj.Mandatory)
{
DoWork();
}
});
http://msdn.microsoft.com/en-us/library/dd460688(v=vs.110).aspx
Кроме того, хотя, возможно, это немного не связано, кажется, что производительность подсматривает за любопытством, если вы имеете дело с очень большими наборами данных, бинарный поиск может быть полезен. В моем случае у меня есть два отдельных списка данных. Мне приходится иметь дело со списками миллионов записей, и это сэкономило мне буквально экспоненциальное количество времени на исполнение. Единственным недостатком является то, что он полезен ТОЛЬКО для очень больших коллекций и должен быть отсортирован заранее. Вы также заметите, что для этого используется класс ConcurrentDictionary, который обеспечивает значительные накладные расходы, но он безопасен для потоков и был необходим из-за требований и количества потоков, которыми я управляю асинхронно.
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);
}
}
}
Это изображение было первоначально размещено в отличной статье, найденной здесь: http://letsalgorithm.blogspot.com/2012/02/intersecting-two-sorted-integer-arrays.html
Надеюсь, это поможет!