使用WCF服务接收可能非常非常大的数据流(从客户端入站),在流上执行两个操作的最有效方法是什么?#34;?我意识到这个问题很广泛。操作类型的示例可能包括
但关键的抽象点是两个操作都需要某种读取操作,并且流不可搜索(据我理解,这意味着如果按顺序执行操作,我必须复制流)。
编辑:This answer似乎也很相关。
答案 0 :(得分:1)
一次读取一个缓冲区并将其传递给两个消费者。您的问题中没有任何内容可以阻止使用这种简单的解决方案。这看起来像这样:
while(dataAvailable) {
var buffer = Read();
Write1(buffer);
Write2(buffer);
}
您还可以使用执行副作用的包装器流(例如散列),然后将缓冲区传递给下一个流。
如果您有多段代码需要从流中读取(例如两个独立的XmlReader
' s),则会变得更加复杂。在这种情况下,您需要解复用。您可能需要保留数据缓冲区,并且只有当所有使用者都已读取该缓冲区时,才会加载下一个缓冲区。这将涉及线程和同步,因为多个独立的读者需要以锁定步骤读取。