在不可搜索的流上执行两个操作的最有效方法是什么?

时间:2014-04-25 18:54:50

标签: c# wcf .net-4.0 filestream

使用WCF服务接收可能非常非常大的数据流(从客户端入站),在流上执行两个操作的最有效方法是什么?#34;?我意识到这个问题很广泛。操作类型的示例可能包括

但关键的抽象点是两个操作都需要某种读取操作,并且流不可搜索(据我理解,这意味着如果按顺序执行操作,我必须复制流)。

编辑This answer似乎也很相关。

1 个答案:

答案 0 :(得分:1)

一次读取一个缓冲区并将其传递给两个消费者。您的问题中没有任何内容可以阻止使用这种简单的解决方案。这看起来像这样:

while(dataAvailable) {
 var buffer = Read();
 Write1(buffer);
 Write2(buffer);
}

And a practical example.

您还可以使用执行副作用的包装器流(例如散列),然后将缓冲区传递给下一个流。

如果您有多段代码需要从流中读取(例如两个独立的XmlReader' s),则会变得更加复杂。在这种情况下,您需要解复用。您可能需要保留数据缓冲区,并且只有当所有使用者都已读取该缓冲区时,才会加载下一个缓冲区。这将涉及线程和同步,因为多个独立的读者需要以锁定步骤读取。