BitArray和BitVector 32结构之间的区别是什么?BitVector 32结构优于BitArray有什么优势?为什么BitVector 32结构比BitArray更有效?
提前致谢。
...杰
答案 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所述的内容:
对于内部使用的布尔值和小整数,
BitVector32
比BitArray
更有效。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。