2016-09-25 11 views
2

Как я могу дросселировать TransformManyBlock в сетке потока данных?Dataflow TransformManyBlock дросселирование

Я указал BoundedCapacity, но похоже, что он только обрабатывает входную очередь.
Таким образом, мой блок продолжает обрабатывать входные и выходные очереди.

В следующих блоках также указывается BoundedCapacity, а затем все мои элементы складываются в очередь вывода TransformManyBlock, и все мои ОЗУ.

ответ

0

Да, вы правы, и нет встроенной возможности ограничить выходную очередь. Это делается так, что для проверки будет намного больше накладных расходов, полная очередь вывода или нет.

Прежде всего, вы должны проверить, какой метод вы используете для добавления своих сообщений. Если он равен Post, он заблокирует поток до того, как сообщение будет опубликовано. Но если вы используете SendAsync, вы должны await его, в другом случае вы наводняете свою RAM await -статистическими машинами и сообщениями, которые находятся в середине публикации.

Однако, по крайней мере, две вещи, которые вы можете сделать:

  1. Создание пользовательского блока с таким свойством. Это может быть сложной задачей, и я не рекомендую это делать.
  2. Введите BufferBlock в вашу цепь для этой цели - this is default way, чтобы добавить дросселирование в поток данных. В этом случае сообщения не будут действовать дальше в вашем потоке данных, если нет места. Это решение будет работать, если вы свяжете свои блоки друг с другом.