Как передать класс и структуру, используя класс namedpipeserverstreamи StreamReader
-
21-09-2019 - |
Вопрос
Я пытаюсь выяснить, как передать класс / struct / etc..использование именованного канала между потоками (я пытаюсь измерить некоторую производительность с помощью секундомера и сравнить ее с другими методами ..)
В любом случае , во всей документации, которую я нашел, говорится об использовании StreamReader и readline для получения данных из NamedPipeServerStream .Однако readline - это строка, как мне на самом деле использовать данные из именованного канала, если я передаю что-то, что не является строкой.
Спасибо, Эяль
Решение
NamedPipeServerStream
является потоком - так что это нормально для готовых двоичных данных.Просто относитесь к нему как к обычному потоку, вместо того чтобы оборачивать его в StreamReader
.
Что касается передачи объектов - зачем использовать именованные каналы, если вы находитесь строго в рамках одного процесса?Просто создайте очередь производителя / потребителя в памяти.
Другие советы
Использование BinaryFormatter - это самый простой способ сериализовать объект в потоке канала и из него.Вам нужно будет украсить класс или структуру атрибутом [Serializable].
Использование трубы, однако, является очень неэффективный способ "передачи" данных между потоками.Каждый поток в процессе имеет доступ к одной и той же куче собранного мусора, сериализация не требуется, пока потоки выполняются в одном домене приложения.Вам действительно необходимо синхронизировать доступ к объекту (объектам), используйте инструкцию lock.Класс ConcurrentQueue делает это очень простым.