У меня есть объект Item
с свойством, называемым generator_list
(hashset строк). У меня есть 8000 объектов, и для каждого объекта я хотел бы посмотреть, как это generator_list
пересекается со всеми остальными generator_list
, а затем я хотел бы сохранить номер пересечения в List<int>
, который будет иметь 8000 элементов, логически.Параллельный цикл в C#, доступ к той же переменной
Процесс занимает около 8 минут, но всего несколько минут с параллельной обработкой, но я не думаю, что делаю параллельную часть вправо, следовательно, вопрос. Может кто-нибудь скажет мне, если и как мне нужно изменить свой код, чтобы воспользоваться параллельными циклами?
Код для моего Item
объекта:
public class Item
{
public int index { get; set; }
public HashSet<string> generator_list = new HashSet<string>();
}
Я сохранил все свои объекты элемент в List<Item> items
(8000 элементов). Я создал метод, который принимает в пунктах (список, я хочу, чтобы сравнить) и 1 пункт (то, что я хочу, чтобы сравнить), и это так:
public void Relatedness2(List<Item> compare, Item compare_to)
{
int compare_to_length = compare_to.generator_list.Count;
foreach (Item block in compare)
{
int block_length = block.generator_list.Count;
int both = 0; //this counts the intersection number
if (compare_to_length < block_length) //to make sure I'm looping
//over the smaller set
{
foreach (string word in compare_to.generator_list)
{
if (block.generator_list.Contains(word))
{
both = both + 1;
}
}
}
else
{
foreach (string word in block.generator_list)
{
if (compare_to.generator_list.Contains(word))
{
both = both + 1;
}
}
}
// I'd like to store the intersection number, both,
// somewhere so I can effectively use parallel loops
}
}
И, наконец, мой параллельный forloop является:
Parallel.ForEach(items, (kk, state, index) => Relatedness2(items, kk));
Любые предложения?
Что происходит, когда вы запускаете его? –
Вы должны изучить использование параллельного объекта коллекции, такого как этот [ConcurrentDictionary (Of TKey, TValue)] (http://msdn.microsoft.com/en-us/library/dd287191 (v = vs.110). aspx), если вы не хотите реализовать его самостоятельно. См. Также: [Параллельный HashSet в .NET Framework] (http://stackoverflow.com/questions/18922985/concurrent-hashsett-in-net-framework). –
Neolisk
Привет, когда я на самом деле запускаю его, он работает, и я использовал для хранения списка результатов для каждого элемента в свойстве для этого элемента. –
thatandrey