#c# #parallel-processing #parallel-extensions
#c# #параллельная обработка #параллельные расширения
Вопрос:
Я создаю приложение-службу Windows, которое принимает в качестве входных данных каталог, содержащий отсканированные изображения. Мое приложение будет перебирать все изображения, и для каждого изображения оно выполнит некоторые операции распознавания, чтобы получить штрих-код, номер счета и номер клиента.
Некоторая справочная информация:
- Задачи, выполняемые приложением, довольно интенсивны для процессора
- В procss загружено большое количество изображений, а файл отсканированного изображения большой (~ 2 МБ)
- Приложение работает на 8-ядерном сервере с 16 ГБ оперативной памяти.
Мой вопрос:
Поскольку он работает с изображениями в файловой системе, я не уверен, действительно ли это что-то изменит, если я изменю свое приложение таким образом, чтобы оно использовало.СЕТЕВЫЕ параллельные задачи.
Кто-нибудь может дать мне совет по этому поводу?
Большое спасибо!
Ответ №1:
Если обработка изображения занимает больше времени, чем чтение N изображений с диска, то одновременная обработка нескольких изображений — это выигрыш. Представьте, что вы можете прочитать файл размером 2 МБ с диска менее чем за 100 мс (включая время поиска). Выделите одну секунду, чтобы прочитать 8 изображений в память.
Итак, если ваша обработка изображений занимает более секунды на изображение, ввод-вывод не является проблемой. Делайте это одновременно. При необходимости вы можете уменьшить масштаб (т. Е. Если обработка занимает 1/2 секунды, то вам, вероятно, лучше всего использовать только 4 одновременных изображения).
Вы должны быть в состоянии протестировать это довольно быстро: напишите программу, которая случайным образом считывает изображения с диска, и вычислите среднее время открытия, чтения и закрытия файла. Также напишите программу, которая обрабатывает выборку изображений и вычисляет среднее время обработки. Эти цифры должны сказать вам, будет ли полезна параллельная обработка.
Комментарии:
1. Очень хороший ответ! Именно тот ответ, которого я ждал!
Ответ №2:
Я думаю, ответ таков: «Это зависит».
Я бы попробовал запустить приложение с каким-либо типом мониторинга производительности (даже в диспетчере задач) и посмотреть, насколько высока загрузка процессора.
Если процессор работает на максимуме; это повысило бы производительность, если запустить его в paralell. В противном случае диск является узким местом, и без некоторых других изменений вы, вероятно, не получили бы большого выигрыша (если таковой вообще был).
Комментарии:
1. Является ли метод проб при ошибке единственным способом выяснить это? Проблема в том, что менеджер еще не дал официального «ДОБРО» на использование параллельных задач. В настоящее время я нахожусь в процессе расследования этого.