Я работаю над инструментом обработки звука, который хотел бы создать с использованием TPL Dataflow. Сам поток данных будет состоять из аудиосэмплов, передаваемых между блоками обработки звука. Эти образцы обычно имеют размер несколько килобайт (_1 _ / _ 2_ с элементами от 1 до 4 тысяч). Таким образом, поток данных представляет собой простой конвейер, который выглядит следующим образом:
SourceBlock<byte[]>
-> TransformBlock<byte[], float[]>
-> TransformBlock<float[], float[]>
-> ...
Некоторые из блоков могут работать чисто «на месте», т. Е. Изменяя входные данные, в то время как другие должны создавать новые сэмплы. Время обработки каждого блока может варьироваться в зависимости от вводимых данных.
Я не хочу постоянно выделять новые массивы и полагаться на сборщик мусора, который позаботится об утилизации объектов. Я хочу получить выгоду от одновременного выполнения блоков и, следовательно, не хочу ограничивать цепочку последовательной обработкой данных (в этом случае мне все равно не понадобится TPL). Мне не нужны блоки обработки для параллельной обработки (меня устраивает не более одного процесса на блок в любой момент времени).
Какая схема является наилучшей для контроля количества образцов в конвейере в данный момент времени и повторного использования образцов / массивов, которые больше не используются?