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

发布于 2024-07-21 07:05:25 字数 140 浏览 4 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

山有枢 2024-07-28 07:05:25

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

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

BitVector32 是一个结构体,仅占用 4 个字节。 BitArray 是一个具有与其相关的开销的类,因此效率较低 - BitArray 在向其添加任何对象之前至少需要 8 个字节,因为它位于堆上。 有关堆栈和堆的更多信息

BitVector32 is more efficient than BitArray for Boolean values and small integers that are used internally. A BitArray can grow indefinitely as needed, but it has the memory and performance overhead that a class instance requires. In contrast, a BitVector32 uses only 32 bits.

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.

栀子花开つ 2024-07-28 07:05:25

以下是 Microsoft BitVector32 文档的说明:

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

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

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

Here is what Microsoft's documentation for BitVector32 states:

BitVector32 is more efficient than BitArray for Boolean values and small integers that are used internally. A BitArray can grow indefinitely as needed, but it has the memory and performance overhead that a class instance requires. In contrast, a BitVector32 uses only 32 bits.

The capacity of BitVector32 is limited to 32 bits, the size of an int. 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).

惜醉颜 2024-07-28 07:05:25

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

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

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

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

A BitVector32 gets it boost over BitArray 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 multiple BitVector32. Since multiple BitVector32 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 picking BitVector32, otherwise you might make more work for yourself reinventing BitArray 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文