2009-05-24 6 views

risposta

7

Ecco cosa Microsoft's documentation for BitVector32 stati:

BitVector32 è più efficiente di BitArray per i valori booleani e piccoli numeri interi che vengono utilizzati internamente. Un BitArray può crescere indefinitamente se necessario, ma ha il sovraccarico di memoria e prestazioni richiesto da un'istanza di classe. Al contrario, un BitVector32 utilizza solo 32 bit.

La capacità di BitVector32 è limitato a 32 bit, la dimensione di un int. Pertanto, l'indicizzazione e il mascheramento possono essere operazioni singole. Confronta questo con un array di bit con 734 bit e vuoi scoprire se il bit 197 è impostato. Pensa a come lo faresti (dal punto di vista del progettista di classe).

+0

Ma in BitVector32 creiamo anche un intance di quel tipo. BitVector32 newVector = new BitVector32 (4); //come questo. –

+1

@ Jaywith.7 »Una nuova istanza di una struttura non ha lo stesso sovraccarico come esempio di una classe. –

17

BitVector32 è più efficiente di BitArray per i valori booleani e piccoli numeri interi che vengono utilizzati internamente. Un BitArray può crescere indefinitamente se necessario, ma ha il sovraccarico di memoria e prestazioni richiesto da un'istanza di classe. Al contrario, un BitVector32 utilizza solo 32 bit.

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

BitVector32 è una struct e consuma solo 4 byte. BitArray è una classe che ha dei sovraccarichi associati ad essa ed è quindi meno efficiente - BitArray avrà bisogno di almeno 8 byte prima di aver aggiunto qualsiasi oggetto ad esso mentre vive sull'heap. More about the stack and heap here.

4

A BitVector32 un incremento di BitArray perché è solo un numero intero a 32 bit e non ha l'overhead associato a una classe (principalmente l'overhead di memoria).

Ciò significa che se è necessario memorizzare più di 32 valori booleani, sarà necessario utilizzare BitArray o più BitVector32. Dal momento che più BitVector32 potrebbero essere scomposti, potresti volerli mettere in un array o in una classe, il che toglierebbe il miglioramento delle prestazioni.

In breve, se è necessario memorizzare 32 o meno valori booleani, utilizzare BitVector32. Se avete bisogno di memorizzare più di valutare le vostre esigenze e le condizioni di codifica prima di prendere ciecamente BitVector32, altrimenti si potrebbe fare più lavoro per te reinventare BitArray e non vedere nessuno dei vantaggi prestazionali.

Nota: nella maggior parte dei casi preferisco usare uno flagged enum anziché uno BitVectore32. Vedi this question per una spiegazione e alcuni buoni trucchi.

Problemi correlati