2009-05-24 36 views

回答

7

這裏是Microsoft's documentation for BitVector32狀態:

BitVector32BitArray對於在內部使用的布爾值和小整數更有效率。 A BitArray可以根據需要無限增長,但它具有類實例所需的內存和性能開銷。相反,BitVector32只使用32位。

BitVector32的容量限於32位,大小爲int。因此,索引和屏蔽可以是單個操作。將此與734位的位數進行比較,您想知道是否設置了位197。想想你會怎麼做(從班級設計師的角度來看)。

+0

但是在BitVector32中我們也創建了這種類型的實例。 BitVector32 newVector = new BitVector32(4); //喜歡這個。 – 2009-05-24 11:27:16

17

對於內部使用的布爾值和小整數,BitVector32比BitArray更有效。 BitArray可以根據需要無限增長,但它具有類實例所需的內存和性能開銷。相比之下,BitVector32只使用32位。

http://msdn.microsoft.com/en-us/library/system.collections.specialized.bitvector32.aspx

BitVector32是一個結構,僅消耗4個字節。 BitArray是一個具有與其關聯的開銷的類,因此效率較低 - 在它添加任何對象到它之前,BitArray將需要至少8個字節,因爲它位於堆上。 More about the stack and heap here

4

A BitVector32得到它在BitArray提升,因爲它只是一個32位整數,並沒有與類(主要是內存開銷)相關的開銷。

這意味着如果您需要存儲多於32個布爾值,那麼您將需要使用BitArray或多個BitVector32。由於多個BitVector32可能很繁瑣,所以您可能希望將它們放入數組或類中,這會消除性能提升。

總之,如果你需要存儲32或更少的布爾值,然後使用BitVector32。如果您需要存儲更多,然後盲目挑選BitVector32之前評估您的需求和編碼條件,否則您可能會爲自己重新創建BitArray做更多的工作,而沒有看到任何性能優勢。

注意:在大多數情況下,我更喜歡使用flagged enum而不是BitVectore32。請參閱this question以獲得解釋和一些好的技巧。