2015-10-07 42 views
0

我聲明瞭一個ConcurrentQueue,並將在while循環中將來自外部源的所有數據點排入隊列。當隊列大小超過某個數字時,有沒有辦法刪除第一個元素,比如100? 謝謝!TryDequeue C#中的一個未知值來自其他不斷增長的ConcurrentQueue

+0

如何在創建隊列時知道「」?使用'TryDequeue'有什麼問題? –

+0

可能最好的解決方案是實現自己的隊列,其中幕後的數據結構是一個循環緩衝區。那會做到這一點,並不太難。 –

+0

'ConcurrentQueue'沒有什麼特別之處,可以促進這一點。誰在閱讀,誰在寫作?您可以隨時使用事件(或監視器)讓生產者在任意條件下(例如超過100的隊列計數)喚醒消費者。 –

回答

0

你可能想要的不是一個隊列而是一個循環/環形緩衝區。

我不知道內置的.NET/C#實現,但基本思想是具有用於添加和刪除元素的單獨索引和信號量的固定大小存儲。

使用併發集合,最好的辦法是BlockingCollection,它等待可用空間或可用元素,阻止讀者或作者。

相關問題