为什么BitVector 32结构比BitArray更有效?

时间:2009-05-24 11:10:54

标签: c# collections bitvector

BitArray和BitVector 32结构之间的区别是什么?BitVector 32结构优于BitArray有什么优势?为什么BitVector 32结构比BitArray更有效?

提前致谢。

...杰

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:8)

以下是Microsoft's documentation for BitVector32所述的内容:

  对于内部使用的布尔值和小整数,

BitVector32BitArray更有效。 BitArray可以根据需要无限增长,但它具有类实例所需的内存和性能开销。相反,BitVector32仅使用32位。

BitVector32的容量限制为32位,即int的大小。因此,索引和屏蔽可以是单个操作。将其与734位的位数组进行比较,您需要确定是否设置了位197。想想你将如何做到这一点(从班级设计师的角度来看)。

答案 2 :(得分:4)

BitVector32使BitArray得到提升,因为它只是一个32位整数,并且没有与类关联的开销(主要是内存开销)。

这意味着如果您需要存储超过32个布尔值,则需要使用BitArray或多个BitVector32。由于多个BitVector32可能是笨重的,您可能希望将它们放入数组或类中,这将消除性能提升。

简而言之,如果您需要存储32个或更少的布尔值,请使用BitVector32。如果您需要存储更多信息,请在盲目选择BitVector32之前评估您的需求和编码条件,否则您可能会为自己重新设计BitArray做更多的工作,而不会看到任何性能优势。

注意:在大多数情况下,我更喜欢使用flagged enum而不是BitVectore32。有关解释和一些好的技巧,请参阅this question