Параллелизм в .NET

Меня попросили показать преимущества и ограничения Параллелизма и оценить его для использования в нашей компании. Мы - преимущественно ориентируемый бизнес данных, и по существу загрузите объекты из базы данных, затем проведите их через некоторую бизнес-логику, дисплей пользователю, затем сохраните назад к DB. В моем уме, нет слишком много в том трубопроводе, который извлек бы выгоду из выполнения параллельно, но быть довольно в новинку для понятия, я мог быть абсолютно неправым. Была бы какая-либо часть того простого трубопровода, который извлечет выгоду из выполнения параллельно? И есть ли какие-либо инструкции для того, как реализовать этот стиль программирования?

Кроме того, есть ли какие-либо инструменты (предпочтительно, которые идут с VS2010), который показал бы, где горлышки бутылки происходят и смогли бы визуально показать то, что продолжается, когда я нажимаю "Go" на простое приложение, которое выполняет данную сумму циклов (предзаписанные простые циклы математики, например, поскольку я как целое число = 1 - 1 000 - делаю некоторые вычисления), параллельно, затем последовательно?

Я должен смочь отобразить различие с помощью достойного профильного инструмента.

6
задан Ben 4 June 2010 в 11:00
поделиться

5 ответов

Да, даже из этой простой модели можно извлечь большую пользу от парралелизма.

Скажем, например, во время загрузки данных вы делаете что-то вроде этого:

foreach(var datarow in someDataSet)
{
    //put your data into some business objects here
}

Вы можете оптимизировать это с помощью parrallelism, сделав что-то вроде этого:

Parrallel.ForEach(someDataSet, datarow =>
{
    //put your data into some business objects here
});

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

Каждая строка данных теперь будет обрабатываться асинхронно, а не последовательно, как в типичном цикле foreach.

Я бы посоветовал вам провести несколько простых тестов производительности на таком же простом примере, как этот, и посмотреть, какие результаты вы получите. Зарисуйте их в электронную таблицу или что-то подобное и покажите их своей команде. Вы можете быть удивлены полученными результатами.

4
ответ дан 17 December 2019 в 00:03
поделиться

Возможно, но мой общий ответ на такого рода запросы, как правило, был бы следующим: Есть ли у вас проблемы с производительностью в ваших приложениях? Если да, то непременно выясните, почему, и подумайте, может ли помочь параллельное выполнение. Если нет, то время, вероятно, лучше потратить в другом месте.

1
ответ дан 17 December 2019 в 00:03
поделиться

Безусловно, есть много задач, которые можно распараллелить, подробный анализ может помочь, но узкие места являются возможными кандидатами.
Этот материал может помочь вам Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4

1
ответ дан 17 December 2019 в 00:03
поделиться

Вы можете получить больше пользы от внедрения слоя кэширования (распределенного или иного), чем от распараллеливания вашего текущего конвейера.

При использовании слоя кэширования объекты, которые вы часто используете, будут находиться в кэше в памяти, что обеспечивает гораздо более высокую производительность чтения/записи. Существует несколько вариантов синхронизации кэша, и они зависят от того, какого поставщика вы выберете.

Я бы предложил взглянуть на MemCached и NCache и посмотреть, подойдут ли они вам.

EDIT: Что касается инструментов профилирования, я широко использовал dotTrace и очень рекомендую его. Вы можете загрузить 30-дневную пробную версию с сайта JetBrains.

1
ответ дан 17 December 2019 в 00:03
поделиться

Вы заходили на сайт Microsoft Параллельные вычисления с управляемым кодом ? Он содержит несколько статей о рекомендациях по реализации, в которых обсуждается, когда и как использовать параллельные функции .Net 4.

0
ответ дан 17 December 2019 в 00:03
поделиться