Как передать класс и структуру, используя класс namedpipeserverstreamи StreamReader

StackOverflow https://stackoverflow.com/questions/2077658

  •  21-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top