簡體   English   中英

TPL Dataflow數據回收

[英]TPL Dataflow data recycling

我正在開發一個音頻處理工具,該工具要使用TPL Dataflow構建。 數據流本身將由在聲音處理模塊之間傳遞的音頻樣本組成。 這些樣本的大小通常為幾Kb(具有1k至4k元素的float[] / byte[] )。 因此,數據流是一個簡單的管道,如下所示:

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

其中一些塊可以完全“就地”工作,即通過使輸入數據發生變異,而其他塊則必須創建新樣本。 每個塊的處理時間可以根據輸入中的數據而變化。

我不想一直分配新的數組,而不想依靠垃圾收集器來處理對象回收。 我想從塊的並發執行中受益,因此不想限制鏈來順序處理數據(在這種情況下,無論如何我都不需要TPL)。 我不需要處理塊來運行並發處理(我可以在任何給定的時間使用每個塊最多一個進程)。

在給定時間控制管線中樣本數量並回收不再使用的樣本/陣列的最佳方案是什么?

如果您的目標是重用數組而不是總是創建新數組並由 GC收集它們,則需要使用ObjectPool

對象池模式是一種軟件創建的設計模式,它使用一組隨時准備使用的已初始化對象(“池”),而不是按需分配和銷毀它們。 池的客戶端將從池中請求一個對象,並對返回的對象執行操作。 客戶端完成后,它將對象返回到池中,而不是銷毀它。 這可以手動或自動完成。

不幸的是,您可能需要自己實現並使其成為線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM