2016-11-10 136 views
-1

我想知道Blocking Collection的默認大小。不知何故,我的程序無法添加阻塞收集的元素。Blocking collection的默認大小

+0

默認的有界容量是-1,意思是「沒有默認容量」,除了是「BlockingCollection 」之外,它根本不應該被阻塞。 –

+0

好的,我的問題是,我無法添加元素阻塞收集,所以我想收集必須充分。因此,這個問題... – OmiH

+0

這意味着它不使用默認大小。所以你的問題是兩個問題:1)什麼是默認大小和2)爲什麼我的程序不能將元素添加到集合中。 1)的答案是「沒有限制」,對2)的答案是「收集已滿,因此它被構造了一個特定的限制」。檢查'.BoundedCapacity'屬性以瞭解哪些限制被放置在集合上。 –

回答

0

As read here,默認構造函數構建一個沒有上限的阻塞集合。所以你的問題在別的地方。

2

缺省大小在此代碼:

var collection = new BlockingCollection<int>(); 

是,它沒有上限,根據documentation

初始化BlockingCollection類的新實例,而不一大寫綁定

(我的重點)

您還可以瞭解通過.BoundedCapacity屬性在這種情況下將返回-1這個上限。

Try an example on .NET Fiddle

顯然一個無界的阻塞集合仍然在元素的數量是有限的,你可以添加到它最終要麼底層陣列中或周圍的內存已滿,但它不是強加的人爲限制由班級本身決定。

如果你注意到你不能將元素添加到這樣的集合中,它將會如此阻塞,那麼顯然它不是以這種方式構建的。

取而代之的是它被構建爲,其中有一個特定的限制,您仍然可以使用上面顯示的.BoundedCapacity屬性來了解此限制。