为什么 BitVector 32 结构比 BitArray 更高效?
BitArray 和 BitVector 32 结构有什么区别?BitVector 32 结构相对于 BitArray 有何优势? 为什么 BitVector 32 结构比 BitArray 更高效?
提前致谢。
杰...
What is the difference between BitArray and BitVector 32 structure and what are the advantages of BitVector 32 structure over BitArray? Why is the BitVector 32 structure more efficient than BitArray?
Thanks in advance.
Jay...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
http://msdn.microsoft.com/en- us/library/system.collections.specialized.bitvector32.aspx
BitVector32 是一个结构体,仅占用 4 个字节。 BitArray 是一个具有与其相关的开销的类,因此效率较低 - BitArray 在向其添加任何对象之前至少需要 8 个字节,因为它位于堆上。 有关堆栈和堆的更多信息。
http://msdn.microsoft.com/en-us/library/system.collections.specialized.bitvector32.aspx
BitVector32 is a struct and consumes only 4 bytes. BitArray is a class that has overheads associated with it and is therefore less efficient - BitArray will need at least 8 bytes before you've even added any objects to it as it lives on the heap. More about the stack and heap here.
以下是 Microsoft BitVector32 文档的说明:
BitVector32
的容量限制为 32 位,即int
的大小。 因此,索引和屏蔽可以是单个操作。 将此与 734 位的位数组进行比较,您想查明位 197 是否已设置。 考虑一下你将如何做到这一点(从类设计者的角度)。Here is what Microsoft's documentation for BitVector32 states:
The capacity of
BitVector32
is limited to 32 bits, the size of anint
. Therefore, indexing and masking can be single operations. Compare this to a bit array with 734 bits and you want to find out if bit 197 is set. Think about how you would do that (from the perspective of the class designer).BitVector32
比BitArray
< 得到提升/a> 因为它只是一个 32 位整数,并且没有与类相关的开销(主要是内存开销)。这意味着如果您需要存储超过 32 个布尔值,那么您将需要使用 BitArray 或多个 BitVector32。 由于多个 BitVector32 可能很麻烦,您可能希望将它们放入数组或类中,这会消除性能提升。
简而言之,如果您需要存储 32 个或更少的布尔值,请使用 BitVector32。 如果您需要存储更多数据,请在盲目选择
BitVector32
之前评估您的需求和编码条件,否则您可能会为自己重新发明BitArray
付出更多的工作,并且看不到任何性能优势。注意:在大多数情况下,我更喜欢使用 标记枚举 而不是
BitVectore32
。 请参阅此问题了解解释和一些好技巧。A
BitVector32
gets it boost overBitArray
because it is just a 32 bit integer and does not have the overhead associated with a class (mainly the memory overhead).This means if you need to store more then 32 Boolean values then you will either need to use
BitArray
or multipleBitVector32
. Since multipleBitVector32
might be cumbersum you might want to put them into an array or a class, which would remove the performance boost.In short, if you need to store 32 or less Boolean values then use a
BitVector32
. If you need to store more then evaluate your needs and coding conditions before blindly pickingBitVector32
, otherwise you might make more work for yourself reinventingBitArray
and not see any of the performance benefits.Note: in most cases I prefer using a flagged enum instead of a
BitVectore32
. See this question for an explanation and some good tricks.