16

BitArray 和 BitVector 32 结构有什么区别,BitVector 32 结构相对于 BitArray 有什么优势?为什么 BitVector 32 结构比 BitArray 更高效?

提前致谢。

杰...

4

3 回答 3

17

对于内部使用的布尔值和小整数,BitVector32 比 BitArray 更有效。BitArray 可以根据需要无限增长,但它具有类实例所需的内存和性能开销。相比之下,BitVector32 仅使用 32 位。

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

BitVector32 是一个结构体,只占用 4 个字节。BitArray 是一个具有相关开销的类,因此效率较低 - BitArray 将需要至少 8 个字节,然后才能将任何对象添加到它,因为它位于堆上。更多关于栈和堆的信息在这里

于 2009-05-24T11:27:20.123 回答
8

以下是Microsoft 的 BitVector32 文档所述:

BitVector32BitArray内部使用的布尔值和小整数更有效。ABitArray可以根据需要无限增长,但它具有类实例所需的内存和性能开销。相反,aBitVector32只使用 32 位。

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

于 2009-05-24T11:20:36.860 回答
4

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

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

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

注意:在大多数情况下,我更喜欢使用标记的枚举而不是BitVectore32. 请参阅此问题以获取解释和一些好技巧。

于 2013-02-13T20:14:02.383 回答