【问题标题】:Why BitVector 32 structure is more efficient than BitArray?为什么 BitVector 32 结构比 BitArray 更高效?
【发布时间】:2010-10-28 13:28:23
【问题描述】:

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

提前致谢。

杰……

【问题讨论】:

    标签: c# collections bitvector


    【解决方案1】:

    Microsoft's documentation for BitVector32 声明如下:

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

    BitVector32 的容量限制为 32 位,即int 的大小。因此,索引和屏蔽可以是单个操作。将此与 734 位的位数组进行比较,您想了解是否设置了位 197。想想你会怎么做(从类设计者的角度)。

    【讨论】:

    • 但在 BitVector32 中,我们也创建了该类型的实例。 BitVector32 newVector = 新 BitVector32(4); //像这样。
    • @Jaywith.7 » 结构的新实例与类实例的开销不同。
    【解决方案2】:

    对于内部使用的布尔值和小整数,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.

    【讨论】:

      【解决方案3】:

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

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

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

      注意:在大多数情况下,我更喜欢使用flagged enum 而不是BitVectore32。请参阅 this question 以获得解释和一些好的技巧。

      【讨论】:

        猜你喜欢
        • 2017-04-14
        • 1970-01-01
        • 2017-12-07
        • 1970-01-01
        • 2016-02-15
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 1970-01-01
        相关资源
        最近更新 更多