2009-06-23 3 views
3

Я заинтересован в получении подробной информации о программном (мягком) приложении реального времени в .Net 3.5/4 Winforms в основном (возможно, WPF). Результаты Google для этой цели довольно плохи - некоторые проблемы с параллелизмом ... вопрос в том, как я мог бы, например, написать клиент мониторинга состояния пациента в режиме реального времени для некоторых медицинских устройств? или брокера с данными в реальном времени? или навигационной системы для поезда? или программное обеспечение автоматизации дома, которое отвечает за открытие/закрытие дверей? и т. д., поэтому это приложение реального времени является целью.Рекомендованный .Net soft real-time

До сих пор я не нашел ни одной книги на нем, кроме Параллельное программирование на Windows - которая основно не об этом, а обработка параллельности ...

Заранее спасибо

ответ

5

Мое личное ощущение, что если ваши требования предназначены для программного обеспечения в реальном времени, вы не должны использовать .net

.net использует виртуальную машину, которая не предназначена для приложений реального времени. Например, вы не можете предсказать, когда собирается сборщик мусора, или как долго он будет проходить. Если это произошло в критический момент, ваше программное обеспечение в реальном времени больше не будет в режиме реального времени.

[Изменить: Извините, я знаю, что это не отвечает на ваш вопрос, но я думаю, что это, вероятно, причина, по которой вам трудно найти информацию об этом, потому что никто этого не делает. Если вы пишете программное обеспечение реального времени, вы, вероятно, должны смотреть на C или C++. И в зависимости от того, насколько это важно, специальная детерминированная операционная система реального времени. Или даже конкретные языки, разработанные с учетом реального времени]

+0

Вы не можете предсказать, когда будет запущен сборщик мусора, но вы можете остановить его работу в критических областях. – Mark

+0

@Mark: Круто. Я этого не знал. У вас есть пример? –

1

Я не согласен с @Simon, вы можете создавать системы реального времени с Windows и .NET. Возможно, вы не сможете создавать очень конкретные жесткие системы, но с надлежащим дизайном и тестированием вы можете и у меня есть.

Существует много методов, которые требуют жестких требований времени до software solutions или оборудования, такого как motion/IO controllers. Windows/.NET упрощает разработку большей части системы, чем разработка ОСРВ, и можно решить несколько критически важных элементов времени. Мой подход заключается в том, чтобы сначала решить эти критические проблемы и проверить их.

+0

Возможно, с помощью специальных аппаратных или программных решений, которые вызывают внешнюю инфраструктуру .net. Но я не вижу, как вы можете делать приложения в реальном времени полностью из .net. CLR просто недостаточно детерминирован. Как вы получите гарантированное время загрузки CLR, разрешение сборки, компиляцию JIT. Не говоря уже о том, что CLR оптимизируется по-разному в разных ситуациях. Я уверен, что с помощью внешних вызовов можно делать критические вещи, но из 100% .net? [Я не говорю о простых приложениях «живого просмотра», я говорю о «реальном времени», где существует определенное ограничение времени на требования] –

+0

Это не определенная область моих знаний, поэтому, если вы сделали 100% .net приложений реального времени, я возьму ваше слово за это. Было бы хорошо знать. –

+0

Саймон, это о дизайне. При разработке систем реального времени вы стараетесь избегать любых динамических функций, таких как загрузка сборок, распределение памяти и т. Д. По крайней мере, избегайте ее во временном критическом коде. – kenny

2

В моей компании мы разработали сервер IVR для телефонии в C# и C++/CLI. Он обрабатывает миллионы звонков в год, работает 24/7, никогда не падает и, как правило, такой же надежный, как мы могли бы пожелать. В этом нет ничего необычного, это просто регулярное обслуживание Windows, и, хотя скорость, эффективность и время отклика, очевидно, были чем-то, на что мы нацелились, он не делает ничего эзотерического, как попытка управления GB и т. Д.

однако большой, но. Драйверы для аппаратного обеспечения, контролируемого нашим приложением, явно не являются .Net. Таким образом, на самом низком уровне нас не беспокоит нежелательный GBC и т. Д., Все миллисекунды зависимых вещей, такие как пересылка пакетов IP-телефонии или потоковой передачи голоса, обрабатываются прошивкой на наших телефонах.

Итак, чтобы обобщить вышеизложенное: я бы даже не подумал о написании драйверов или очень малой латентности в .Net, но я определенно напишу управляющий код/​​логику в .Net.

К сожалению, я не могу указать вам на какие-либо полезные ресурсы, так как я никогда не сталкивался ни с одним из них, но я надеюсь, что этот случай использования поможет вам сделать информированное заявление о том, следует ли рассматривать .NET для ваших проектов в реальном времени.

1

Parralelism and threading - некоторые из инструментов .NET, которые помогут вам писать приложения реального времени, но архитектура систем реального времени не зависит от языка.

This В статье MSDN есть несколько хороших ссылок для параллельных вычислений.

Возможно, Smart Client Software Factory может стать хорошим ориентиром для вас, чтобы начать расследование.

Смежные вопросы