Параллельные расширения .net 4.0 - PullRequest
0 голосов
/ 26 февраля 2011

У меня есть метод, который динамически выполняет несколько вызовов для каждого пользовательского элемента управления (.ascx). Эти вызовы, в свою очередь, выполняют много вычислений (3 - 4 секунды) для каждого пользовательского элемента управления. Мне удалось добавить Parallel.For для зацикливания пользовательского элемента управления с уменьшением времени до 5 - 6 секунд.

Parallel.For(each user control )
{
compute();
}

List<int> compute()
{

     for(i=0; i<999999;i++)
          {.....}

}

Мне было интересно, если бы я использовал вложенные циклы Parallel.For, это имело бы большое значение, вот как-то так.

Parallel.For(each user control )
{
compute();
}

List<int> compute()
{

    Parallel.For(i=0; i<999999; ()=>
          {.....}

}

Поможет ли вложение структуры Parallel?

1 Ответ

2 голосов
/ 26 февраля 2011

Это будет зависеть от количества элементов управления.

Если у вас много элементов управления (больше чем в 2 раза больше ядер ЦП), вложение циклов Parallel.For, скорее всего, приведет к тому, что это будет выполняться намного медленнее, поскольку вы добавляете накладные расходы, которые не могут быть решены, так как вы уже максимальный параллелизм вашей системы.

Однако, если у вас есть только один или два элемента управления, и в вашей системе 4 или 8 или более ядер, то вложение может быть полезным.

Если сомневаетесь, я бы порекомендовал попробовать и профилировать, чтобы посмотреть, поможет ли это. Просто убедитесь, что вы профилируете на разных наборах оборудования (в соответствии с вашими целями развертывания), так как одновременное профилирование очень зависит от оборудования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...