Я использовал C # для создания нескольких высокоскоростных приложений машинного зрения в режиме реального времени, которые работают круглосуточно и работают в зависимости от приложения. Если в программном обеспечении что-то идет не так, то в реальном мире что-то сразу и явно идет не так.
Я обнаружил, что C # / .Net предоставляют довольно хорошую функциональность для этого. Как уже говорили другие, определенно оставайтесь на вершине сбора мусора. Разбейте обработку на несколько логических шагов, и у каждого из них будут отдельные потоки. Я обнаружил, что модель программирования Producer Consumer хорошо подходит для этого, возможно, ConcurrentQueue для начинающих.
Вы можете начать с чего-то вроде:
- Поток 1 захватывает изображение с камеры, преобразует его в некоторый формат и помещает в ImageQueue
- Поток 2 использует ImageQueue, обрабатывает изображение и создает объект данных, который помещается в ProcessedQueue
- Поток 3 использует ProcessedQueue и делает что-то интересное с результатами.
Если поток 2 занимает слишком много времени, потоки 1 и 3 все еще продолжаются. Если у вас многоядерный процессор, вы будете использовать больше математики. Вы также можете использовать несколько потоков вместо любого, который я написал выше, хотя вам придется позаботиться о том, чтобы упорядочить результаты вручную.
Редактировать
Прочитав ответы других людей, вы, вероятно, могли бы поспорить с моим определением «в реальном времени». В моем случае компьютер производит цели, которые он посылает контроллерам движения, которые выполняют фактическое движение в реальном времени. Контроллеры движения предоставляют свои собственные уровни безопасности для таких вещей, как время, максимальный / минимальный диапазоны, плавное ускорение / замедление и датчики безопасности. Эти контроллеры считывают датчики по всей фабрике с временем цикла менее 1 мс.