Почему структура 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
. См. этот вопрос для объяснения и некоторых хороших трюков.