TPL 数据流数据回收
本文关键字:数据 数据流 TPL | 更新日期: 2023-09-27 18:33:42
我正在开发一个音频处理工具,我想使用 TPL 数据流构建它。数据流本身将由在声音处理块之间传递的音频样本组成。这些样本的大小通常为几Kb(float[]
/byte[]
,具有1k到4k元素(。因此,数据流是一个简单的管道,如下所示:
SourceBlock<byte[]>
-> TransformBlock<byte[], float[]>
-> TransformBlock<float[], float[]>
-> ...
一些块可以纯粹"就地"工作,即通过改变输入数据,而其他块必须创建新样本。每个块的处理时间可能因输入中的数据而异。
我不想一直分配新数组并依靠垃圾收集器来处理对象回收。我想从块的并发执行中受益,因此不想限制链按顺序处理数据(在这种情况下,无论如何我都不需要 TPL(。我不需要处理块来运行并发处理(在任何给定时间,每个块最多一个进程都可以(。
在给定时间控制管道中的样本数量并回收不再使用的样本/阵列的最佳方案是什么?
如果您的目标是重用数组,而不是总是创建新数组并让 GC 收集它们,则需要使用 ObjectPool:
对象池模式是一种软件创建设计模式,它使用一组随时可用的初始化对象("池"(,而不是按需分配和销毁它们。池的客户端将从池中请求对象并对返回的对象执行操作。客户端完成后,它将对象返回到池中,而不是销毁它;这可以手动或自动完成。
不幸的是,您可能需要自己实现它并使其线程安全。