Почему структура BitVector 32 более эффективна, чем BitArray? - PullRequest
15 голосов
/ 24 мая 2009

В чем разница между BitArray и структурой BitVector 32 и каковы преимущества структуры BitVector 32 перед BitArray? Почему структура BitVector 32 более эффективна, чем BitArray?

Заранее спасибо.

Jay ...

Ответы [ 3 ]

17 голосов
/ 24 мая 2009

BitVector32 более эффективен, чем BitArray, для логических значений и небольших целых чисел, которые используются внутри. BitArray может расти неограниченно по мере необходимости, но у него есть накладные расходы на память и производительность, необходимые для экземпляра класса. Напротив, BitVector32 использует только 32 бита.

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

BitVector32 является структурой и занимает всего 4 байта. BitArray - это класс, с которым связаны накладные расходы, и поэтому он менее эффективен - BitArray потребуется по крайней мере 8 байт, прежде чем вы даже добавите в него какие-либо объекты, поскольку он живет в куче. Подробнее о стеке и куче здесь .

8 голосов
/ 24 мая 2009

Вот что документация Microsoft для BitVector32 гласит:

BitVector32 более эффективно, чем BitArray для логических значений и небольших целых чисел, которые используются внутри. BitArray может расти неограниченно по мере необходимости, но у него есть накладные расходы на память и производительность, необходимые для экземпляра класса. Напротив, BitVector32 использует только 32 бита.

Емкость BitVector32 ограничена 32 битами, размер int. Следовательно, индексирование и маскирование могут быть отдельными операциями. Сравните это с битовым массивом с 734 битами, и вы хотите узнать, установлен ли бит 197. Подумайте, как бы вы это сделали (с точки зрения дизайнера классов).

4 голосов
/ 14 февраля 2013

A BitVector32 получает повышение по сравнению с BitArray, потому что это всего лишь 32-разрядное целое число и не имеет служебных данных, связанных с классом (главным образом, служебной памяти) .

Это означает, что если вам нужно сохранить более 32 булевых значений, вам нужно будет использовать BitArray или несколько BitVector32. Так как несколько BitVector32 могут быть громоздкими, вы можете поместить их в массив или класс, что устранит повышение производительности.

Короче говоря, если вам нужно сохранить 32 или менее логических значений, используйте BitVector32. Если вам нужно хранить больше, тогда оцените свои потребности и условия кодирования, прежде чем слепо выбрать BitVector32, в противном случае вы можете сделать больше работы для себя, заново изобретая BitArray и не заметив каких-либо преимуществ для производительности.

Примечание: в большинстве случаев я предпочитаю использовать перечисление с флагом вместо BitVectore32. См. этот вопрос для объяснения и некоторых хороших трюков.

...