Код, который я выполняю, имеет простую функцию. Он сравнивает первые 2 элемента кортежа (Tuple<int, int, BigInteger>
) с другим и определяет, являются ли все записи разными. Если они есть, комбинированный Кортеж (Tuple<int, int, int, int BigInteger>
) формируется и добавляют к List<Tuple<int, int, int, int, BigInteger>>
Вложенные Parallel.For производительность петли и большие списки
Пример:
Tuple<int, int, BigInteger> example1 = new Tuple<int, int BigInteger>(5, 6, 1000);
Tuple<int, int, BigInteger> example2 = new Tuple<int, int BigInteger>(7, 9, 7979);
С 5, 6, 7 и 9 все различны, они будут добавлены в окончательный список как < 5, 6, 7, 9, 1000 + 7979> (Item5 быть сумма ITEM3 в Tuple1 и Tuple2)
Вот мой код
for (int a = 0; a < rtSort.Count(); a++) {
Parallel.For<List<Tuple<int, int, int, int, BigInteger>>>(0, rtSort.Count - 1,() => new List<Tuple<int, int, int, int, BigInteger>>(), (b, loop, storage) => {
if (rtSort[a].Item1 != rtSort[b].Item1 && rtSort[a].Item1 != rtSort[b].Item2 && rtSort[a].Item2 != rtSort[b].Item2)
storage.Add(new Tuple<int, int, int, int, BigInteger>(rtSort[a].Item1, rtSort[a].Item2, rtSort[b].Item1, rtSort[b].Item2, rtSort[a].Item3 + rtSort[b].Item3));
return storage;
},
(x) => {
lock (rt2) {
rt2.AddRange(x);
}
});
}
Я уже знаю, т шляпа Элементы в то же кортежей не будет то же самое, так что я просто должен проверить против другого
rtSort.Count()
обычно имеет значение 500500, а это означает, что в общей сложности, вложенная Parallel.For
цикл и цикл For
делает 500500 * 500500 итераций до отделки (250500250000).
Мой вопрос: Есть ли что я могу сделать, чтобы улучшить это и/или я делаю что-то неправильно, что может быть на самом деле препятствует производительности Петля Parallel.For в
Благодаря
Каков тип rt2? –
Список> –
CocoaMix86
Что произойдет, если 3 кортежа с первыми двумя значениями одинаковы? –