Использование параллельных задач C # в приложении распознавания текста?

#c# #parallel-processing #parallel-extensions

#c# #параллельная обработка #параллельные расширения

Вопрос:

Я создаю приложение-службу Windows, которое принимает в качестве входных данных каталог, содержащий отсканированные изображения. Мое приложение будет перебирать все изображения, и для каждого изображения оно выполнит некоторые операции распознавания, чтобы получить штрих-код, номер счета и номер клиента.

Некоторая справочная информация:

  1. Задачи, выполняемые приложением, довольно интенсивны для процессора
  2. В procss загружено большое количество изображений, а файл отсканированного изображения большой (~ 2 МБ)
  3. Приложение работает на 8-ядерном сервере с 16 ГБ оперативной памяти.

Мой вопрос:

Поскольку он работает с изображениями в файловой системе, я не уверен, действительно ли это что-то изменит, если я изменю свое приложение таким образом, чтобы оно использовало.СЕТЕВЫЕ параллельные задачи.

Кто-нибудь может дать мне совет по этому поводу?

Большое спасибо!

Ответ №1:

Если обработка изображения занимает больше времени, чем чтение N изображений с диска, то одновременная обработка нескольких изображений — это выигрыш. Представьте, что вы можете прочитать файл размером 2 МБ с диска менее чем за 100 мс (включая время поиска). Выделите одну секунду, чтобы прочитать 8 изображений в память.

Итак, если ваша обработка изображений занимает более секунды на изображение, ввод-вывод не является проблемой. Делайте это одновременно. При необходимости вы можете уменьшить масштаб (т. Е. Если обработка занимает 1/2 секунды, то вам, вероятно, лучше всего использовать только 4 одновременных изображения).

Вы должны быть в состоянии протестировать это довольно быстро: напишите программу, которая случайным образом считывает изображения с диска, и вычислите среднее время открытия, чтения и закрытия файла. Также напишите программу, которая обрабатывает выборку изображений и вычисляет среднее время обработки. Эти цифры должны сказать вам, будет ли полезна параллельная обработка.

Комментарии:

1. Очень хороший ответ! Именно тот ответ, которого я ждал! 🙂

Ответ №2:

Я думаю, ответ таков: «Это зависит».

Я бы попробовал запустить приложение с каким-либо типом мониторинга производительности (даже в диспетчере задач) и посмотреть, насколько высока загрузка процессора.

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

Комментарии:

1. Является ли метод проб при ошибке единственным способом выяснить это? Проблема в том, что менеджер еще не дал официального «ДОБРО» на использование параллельных задач. В настоящее время я нахожусь в процессе расследования этого.