Почему нет увеличения скорости при масштабировании изображений с помощью Parallel.For? [Дубликат]

Очистить и перестроить

. «Чистая» сборки может удалить «мертвую древесину», которая может быть оставлена ​​лежащей рядом с предыдущими сборками, неудачными сборками, неполными сборками и другими проблемами сборки.

В общем случае среда IDE или сборка будет включать в себя некоторую форму «чистой» функции, но это может быть неправильно настроено (например, в ручном файле) или может завершиться неудачей (например, промежуточные или результирующие двоичные файлы - только).

После завершения «очистки» убедитесь, что «чистый» преуспел, и весь сгенерированный промежуточный файл (например, автоматический файл makefile) был успешно удален.

Этот процесс можно рассматривать как конечный вариант, но часто является хорошим первым шагом ; особенно если недавно был добавлен код, связанный с ошибкой (локально или из исходного репозитория).

4
задан Rotem 18 August 2013 в 12:31
поделиться

3 ответа

Вот скриншот анализатора параллелизма, который я использовал, чтобы посмотреть, что происходит с этими потоками:

enter image description here [/g0]

Да, вы можете видеть лоты красного (блокировка) с зелеными пятнами (исполнение). Потоки по очереди вводят критический раздел, который получен внутри внутренней функции GpGraphics :: RenderDrawPath (). Большие капли зеленого цвета - это то место, где программа действительно рисовала линии (я заменил DrawEllipse на DrawRectangle и избавился от случайного вызова).

Существует несколько параллелизм, вы можете, например, увидеть вызов RenderDrawPath () перекрывая код, который отображает сглаженные линии, общая загрузка процессора составляет около 35%. Но этого мало.

Конечно, вы ничего не можете с этим поделать. Вы опережаете, перекрывая логику в своей собственной программе, чтобы решить, что делать с помощью вызовов GDI +. Обычно это происходит, тест слишком синтетический.

4
ответ дан Hans Passant 25 August 2018 в 16:19
поделиться

Кажется, что блокировка происходит в неуправляемом коде внутри библиотеки GDI + (к сожалению, это поведение не упоминается в официальных документах).

Аналогичный вопрос: Параллелирование GDI + изменение размера .net

3
ответ дан Community 25 August 2018 в 16:19
поделиться

Я не уверен на 100%. Но да, в классе Graphics есть объект блокировки private static. Кажется, что он заблокирован только от GetHalftonePalette, который, в свою очередь, вызывается всякий раз, когда Bitmap инициализируется внутри объекта Graphics. Похоже, что это может быть причиной споров.

(Примечание: первые результаты после 5 минут использования ILSpy .. не очень углублены)

2
ответ дан Simon Whitehead 25 August 2018 в 16:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: