Как передать класс и структуру с помощью класса NamedPipeServerStreamand StreamReader - PullRequest
1 голос
/ 16 января 2010

Я пытаюсь выяснить, как передать класс / структуру / и т. Д., Используя именованный канал между потоками (я пытаюсь измерить некоторую производительность с помощью секундомера и сравнить ее с другими методами ..)

Во всяком случае, вся документация, которую я нашел, говорит об использовании StreamReader и readline для получения данных из NamedPipeServerStream. Однако readline - это строка, как мне на самом деле использовать данные из именованного канала, если я передаю что-то, что не является строкой.

Спасибо, Эяль

Ответы [ 2 ]

2 голосов
/ 16 января 2010

Использование BinaryFormatter - это самый простой способ сериализации объекта в потоке канала и из него. Вам нужно будет украсить класс или структуру с помощью атрибута [Serializable].

Однако использование канала - это очень неэффективный способ "передачи" данных между потоками. Каждый поток в процессе имеет доступ к одной и той же куче, собранной мусором, сериализация не требуется, если потоки работают в одном и том же домене приложений. Вам нужно синхронизировать доступ к объекту (ам), используйте оператор блокировки. Класс ConcurrentQueue делает его очень простым.

2 голосов
/ 16 января 2010

NamedPipeServerStream - это поток, поэтому он подходит для двоичных данных из коробки. Просто относитесь к нему как к обычному потоку, а не оборачивайте его в StreamReader.

Что касается передачи объектов - зачем использовать именованные каналы, если вы строго находитесь в одном процессе? Просто создайте очередь производителя / потребителя в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...