2009-05-24 55 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以获得解释和一些好的技巧。