Использование ThreadPool против других форм многопоточности в C # .Net - PullRequest
0 голосов
/ 03 января 2019

У меня есть приложение реального времени, встроенное в c # .NET и sql как DB.

Приложение состоит из трех модулей:

  1. Получение изображений под автомобилем (UVSS) с использованиемкамера,
  2. Обнаружение номера автомобильного номера (ALPR)
  3. Запись видео с информацией о драйвере (DIC).

Сначала мы получаем триггер от ADM 6060, который затемактивирует камеры (через код), а затем эти три модуля происходят одновременно с использованием потоков (и затем сохраняются в БД).Наконец, мы отображаем их в WinForm.

В настоящее время я использую два потока:

  1. Поток 1 для отслеживания значения триггера, полученного ADM
  2. Поток 2 для захвата в реальном времениИзображения под автомобилем

Далее, получив соответствующее значение триггера от ADM6060, я создаю две задачи - для обнаружения ALPR и видео DIC.

Я не могу опубликовать весь код из-за карты компанииполитика, но вот фрагмент:

У меня есть два потока в Form1:

ThreadStart tsmain = new ThreadStart(this.ServiceCaptureImage);

thread = new Thread(tsmain); 

ThreadStart tsmain1 = new ThreadStart(this.Draw_Bitmap); 

continuous = new Thread(tsmain1);

thread.start () и непрерывный.start () выполняются в form_Load.

private void ServiceCaptureImage()
{ 
  try{ 
         while(true)
         { 
            if(bdata[0]==false)
                {
                  var task1 = Task.Factory.StartNew(() => ALPRdetect()); 
                  var task2 = Task.Factory.StartNew(() => DICcapture()); 
                   Task.WhenAll(task1, task2);
                } 
          } 
        } 
        catch (Exception ex){
          MessageBox.show(ex.message)
        }

}

Я вручную посчитал количество автомобилей, которые были обнаружены системой.В общей сложности 70 пропущенных автомобилей: 53 были полностью обнаружены (ALPR, под транспортным средством и DIC), 4 автомобиля остались незамеченными, 9 автомобилей ALPR пропали без вести, а в оставшихся под автомобилем пропали без вести.

Эффективностьпока достигнут 84%, в некоторых случаях приложение выполняет только ALPR, но не UVSS или наоборот.

В чем может быть причина?Кроме того, я должен использовать ThreadPool в этом случае?

...