Если производительность в вопросе это, вероятно, не является узким местом, однако, вы считали, используя параллельную библиотеку или 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
Надежда это помогает!
Почему бы не измерить и не узнать? – Brian
@Brian - это не очень приветливое отношение. –
Просто хотел разобрать и посмотреть, что думают люди. В любом случае, спасибо. –