我试图弄清楚如何在线程之间使用命名管道传递一个类/结构/等(我正在尝试使用秒表测量一些性能并将其与其他方法进行比较..)
无论如何,我发现的所有文档都在谈论使用 StreamReader 和 readline 从 NamedPipeServerStream 获取数据。但是 readline 是一个字符串,如果我传递的不是字符串,我如何实际使用命名管道中的数据。
谢谢, 埃亚尔
我试图弄清楚如何在线程之间使用命名管道传递一个类/结构/等(我正在尝试使用秒表测量一些性能并将其与其他方法进行比较..)
无论如何,我发现的所有文档都在谈论使用 StreamReader 和 readline 从 NamedPipeServerStream 获取数据。但是 readline 是一个字符串,如果我传递的不是字符串,我如何实际使用命名管道中的数据。
谢谢, 埃亚尔
NamedPipeServerStream
是一个流 - 所以开箱即用的二进制数据很好。只需将其视为普通流,而不是将其包装在StreamReader
.
至于传递对象 - 如果您严格在单个进程中,为什么要使用命名管道?只需创建一个内存生产者/消费者队列。
使用 BinaryFormatter 是序列化对象进出管道流的最简单方法。您需要使用 [Serializable] 属性来装饰类或结构。
然而,使用管道是在线程之间“传递”数据的一种非常低效的方式。进程中的每个线程都可以访问同一个垃圾收集堆,只要线程在同一个 AppDomain 中运行,就不需要序列化。您确实需要同步对对象的访问,请使用 lock 语句。ConcurrentQueue 类使它非常简单。