数据流TransformManyBlock限流

4

我如何限制Dataflow网格中的TransformManyBlock

我已经指定了一个BoundedCapacity,但它似乎只影响输入队列。
所以我的块继续处理输入,输出队列不断增长。

以下块也指定了BoundedCapacity,然后所有的项都堆积在TransformManyBlock的输出队列中,耗尽了所有的RAM。


相关:TPL Dataflow块消耗所有可用内存 - Theodor Zoulias
1个回答

0

是的,你说得对,没有内置的机会来限制输出队列。这样做的原因是检查输出队列是否已满会增加更多的开销。

你应该检查的一件事是你用于添加消息的方法。如果是Post,它将阻塞线程,直到消息被发布。但如果你使用SendAsync,你应该await它,否则你会用await状态机和正在发布中的消息淹没你的RAM。

然而,至少有两件事情你可以做:

  1. 创建一个具有此属性的自定义块。这可能很具有挑战性,我不建议这样做。
  2. 在你的链中引入BufferBlock以实现此目的 - 这是默认方式在数据流中添加一些节流控制。在这种情况下,如果没有位置,消息将无法在你的数据流中继续传递。这个解决方案将在你的块之间链接时起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接