【发布时间】:2013-04-19 09:30:10
【问题描述】:
我想知道在输入缓冲区中接收到第一项或在数据块中处理时是否可以订阅一次性通知。我知道我可以在数据块中设置一个标志,但这会产生开销,因为它会运行检查每个新项目的标志。我的数据块处理数百万个项目,因此这个标志增加了不必要的开销。
有没有更好的方法来通知第一个传入的项目?
【问题讨论】:
-
也许将输入缓冲区连接到
BroadcastBlock,然后它将链接到您的主数据流和WriteOnceBlock<T>?WriteOnceBlock只会被写入一次(第一项)... -
你真的是说检查单个
bool是不必要的开销吗?我不信。你试过测量这个吗? -
嗯,绝对是个好主意,使用 WriteOnceBlock。无论如何我都使用广播块,所以应该可以。我想我不必处理随后被拒绝的消息,因为项目是通过广播块流式传输的,对吗?
-
@svick,我有并且当我迭代大约 1700 万条消息时(数据块处理这些消息的批次,但在内部每个批次都被迭代。)在每次运行时,任何 if 条件都会增加开销。现在人们可以争论它是否重要。我测量了它,如果我能在完整的运行中减少 200-500 毫秒,那么它是值得的。
-
@svick,但我知道您可能指向的地方,可能是我查看了错误的技术实现,如果延迟/吞吐量如此重要,我应该寻找 C++ 解决方案?
标签: c# task-parallel-library dataflow tpl-dataflow