TPL 数据流数据回收



我正在开发一个音频处理工具,我想使用 TPL 数据流构建它。数据流本身将由在声音处理块之间传递的音频样本组成。这些样本的大小通常为几Kb(float[]/byte[],具有1k到4k元素(。因此,数据流是一个简单的管道,如下所示:

SourceBlock<byte[]> 
    -> TransformBlock<byte[], float[]> 
        -> TransformBlock<float[], float[]>
            -> ...

一些块可以纯粹"就地"工作,即通过改变输入数据,而其他块必须创建新样本。每个块的处理时间可能因输入中的数据而异。

我不想一直分配新数组并依靠垃圾收集器来处理对象回收。我想从块的并发执行中受益,因此不想限制链按顺序处理数据(在这种情况下,无论如何我都不需要 TPL(。我不需要处理块来运行并发处理(在任何给定时间,每个块最多一个进程都可以(。

在给定时间控制管道中的样本数量并回收不再使用的样本/阵列的最佳方案是什么?

如果您的目标是重用数组,而不是总是创建新数组并让 GC 收集它们,则需要使用 ObjectPool:

对象池模式

是一种软件创建设计模式,它使用一组随时可用的初始化对象("池"(,而不是按需分配和销毁它们。池的客户端将从池中请求对象并对返回的对象执行操作。客户端完成后,它将对象返回到池中,而不是销毁它;这可以手动或自动完成。

不幸的是,您可能需要自己实现它并使其线程安全。

最新更新