如何使用NamedPipeServerStreamand StreamReader类传递Class和struct

时间:2010-01-16 14:42:57

标签: c# named-pipes streamreader

我试图弄清楚如何在线程之间使用命名管道传递类/ struct / etc. ..我试图使用秒表测量一些性能并将其与其他方法进行比较..)

无论如何,我发现的所有文档都在谈论使用StreamReader和readline来从NamedPipeServerStream获取数据。但是readline是一个字符串,如果我传递的不是字符串,我如何实际使用命名管道中的数据。

谢谢, 的Eyal

2 个答案:

答案 0 :(得分:2)

NamedPipeServerStream是一个流 - 因此对于开箱即用的二进制数据来说很好。只需将其视为普通流,而不是将其包裹在StreamReader

至于传递对象 - 如果你只是在一个进程中,为什么要使用命名管道?只需创建一个内存生产者/消费者队列。

答案 1 :(得分:2)

使用BinaryFormatter是将对象输入和输出管道流的最简单方法。您需要使用[Serializable]属性来装饰类或结构。

然而,使用管道是非常低效的方式在线程之间“传递”数据。进程中的每个线程都可以访问相同的垃圾收集堆,只要线程在同一个AppDomain中运行,就不需要序列化。您需要同步对对象的访问,使用lock语句。 ConcurrentQueue类使它变得非常简单。