C # Параллельное использование задачи в приложении OCR? - PullRequest
3 голосов
/ 27 апреля 2011

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

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

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

Мой вопрос:

Поскольку он работает с изображениями в файловой системе, я не уверен, будет ли это действительно иметь значение, если я изменю свое приложение таким образом, что оно будет использовать .NET Parallel Tasks.

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

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

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

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

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

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

1 голос
/ 27 апреля 2011

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

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

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

...