Лучший способ отправить сообщение для поточной обработки

Что является самым эффективным и самым быстрым способом отправить, сообщение к потоку (не обрабатывают), которые работают в в то время как (1) цикл в c#/.net:

  1. Используя синхронизируемую очередь (такой в Блокирующихся Очередях и Коммуникация Потока в C#)

  2. Запуск цикла сообщения Используя Приложение. Выполнение системных winforms в контексте потока и прежде, чем выполнить application.run подписывается на событие, которые получают сообщение в контексте потока.

  3. Используя сокет или именованный канал, чтобы отправить потоку сообщение.

В Linux я используюсь, чтобы сделать это с сокетами домена Unix, что эквивалентный путь состоит в том, чтобы сделать это в окнах? совместно использовать файл памяти? именованный канал? Что Вы думаете?

16
задан svick 26 February 2013 в 10:41
поделиться

1 ответ

Я бы лично использовал очередь производителя / потребителя. По сути, это и есть цикл сообщений WinForms, только специфичным для Windows Forms способом.

Обратите внимание, что если вы можете использовать .NET 4.0, в структуру встроены коллекции , которые делают это очень просто. В частности, использование BlockingCollection , обернутого вокруг ConcurrentQueue , будет делать то, что вы хотите.

Я бы лично не использовал код GeeksCafe - я бы инкапсулируют природу производителя / потребителя в свой собственный класс, который обертывает очередь, а не обрабатывает любую очередь таким образом с помощью методов расширения. В частности, вам нужно, чтобы все стороны правильно обрабатывали очередь, а это означает, что, на мой взгляд, лучше предоставить ей собственный API.

15
ответ дан 30 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: