Почему структура BitVector 32 более эффективна, чем BitArray?

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

Спасибо заранее.

Jay...

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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