2009-05-24 8 views

Respuesta

7

Esto es lo que Microsoft's documentation for BitVector32 estados:

BitVector32 es más eficiente que BitArray para valores booleanos y enteros pequeños que se utilizan internamente. Un BitArray puede crecer indefinidamente según sea necesario, pero tiene la memoria y la sobrecarga de rendimiento que requiere una instancia de clase. Por el contrario, un BitVector32 usa solo 32 bits.

La capacidad de BitVector32 está limitado a 32 bits, el tamaño de un int. Por lo tanto, la indexación y el enmascaramiento pueden ser operaciones únicas. Compare esto con una matriz de bits con 734 bits y desea saber si está configurado el bit 197. Piensa en cómo lo harías (desde la perspectiva del diseñador de la clase).

+0

Pero en BitVector32 También creamos un intance de ese tipo. BitVector32 newVector = new BitVector32 (4); //Me gusta esto. –

+1

@ Jaywith.7 »Una nueva instancia de una estructura no tiene la misma sobrecarga que una instancia de una clase. –

17

BitVector32 es más eficiente que BitArray para valores booleanos y enteros pequeños que se usan internamente. Un BitArray puede crecer indefinidamente según sea necesario, pero tiene la memoria y la sobrecarga de rendimiento que requiere una instancia de clase. Por el contrario, un BitVector32 usa solo 32 bits.

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

BitVector32 es una estructura y consume sólo 4 bytes. BitArray es una clase que tiene gastos indirectos asociados y, por lo tanto, es menos eficiente: BitArray necesitará al menos 8 bytes antes de agregarle objetos, ya que vive en el montón. More about the stack and heap here.

4

A BitVector32 obtiene un impulso sobre BitArray porque es solo un entero de 32 bits y no tiene la sobrecarga asociada a una clase (principalmente la sobrecarga de memoria).

Esto significa que si necesita almacenar más de 32 valores booleanos, entonces deberá usar BitArray o múltiple BitVector32. Como el número BitVector32 puede ser engomático, es posible que desee colocarlos en una matriz o una clase, lo que eliminaría el aumento del rendimiento.

En pocas palabras, si necesita almacenar 32 o menos valores booleanos luego usar un BitVector32. Si necesita almacenar más de evaluar sus necesidades y las condiciones de codificación antes ciegamente recoger BitVector32, de lo contrario podría hacer más trabajo para ti reinventar BitArray y no ver ninguna de las ventajas de rendimiento.

Nota: en la mayoría de los casos prefiero usar un flagged enum en lugar de un BitVectore32. Ver this question para una explicación y algunos buenos trucos.

Cuestiones relacionadas