BitArray высокая производительность Or & And & Xor
Вот пример использования:
bitarray = bitarray.And(mask);
И вопрос в том, насколько это эффективно по сравнению с той же операцией на int[]
с копией в тот же массив, но не создавая другой и возвращая его (что стоит времени и создает бесполезный мусор), я уже знаю, какой тип BitArray имеет закрытый непубличный член m_array
и это просто int[]
, Есть ли какой-нибудь метод для выполнения этих операций без создания новых экземпляров? Например, вот так:
bitarray.And(mask);
И проще, я хочу закрепить эту операцию
bitarray |= mask;
И я бы знал, какой экземпляр bitarray изменился внутри, не создавая новый экземпляр BitArray
,
Я знаю, я могу сделать это с помощью рефлексии, но я не думаю, что это будет быстрее... Или есть какой-то лучший подход, чем создание моего собственного BitArray
?
2 ответа
Насколько эффективно по сравнению с вашей собственной реализацией int[]? Пишите тесты и узнайте.
BitArray не является неизменным, он не создает копии. Он просто возвращает тот же экземпляр. Мне кажется, что ваша собственная реализация не сможет победить.
См. BitArray: http://referencesource.microsoft.com/#mscorlib/system/collections/bitarray.cs,0a9d097e057af932,references
Есть ли какой-нибудь метод для выполнения этих операций без создания новых экземпляров?
BitArray.And()
метод не возвращает новый экземпляр BitArray
, Он просто возвращает "текущий" экземпляр (т. Е. Экземпляр, который вы использовали, когда вызывали метод).
И я бы знал, какой экземпляр bitarray изменился внутри, не создавая новый экземпляр
BitArray
Мне кажется, что самый простой способ сделать это - написать цикл, который сравнивает значения битов в bitarray
объект с теми, кто в mask
объект, прежде чем применить And()
метод.
Обратите внимание, что для того, чтобы сделать что-нибудь интересное с этой информацией, вам, вероятно, нужно сохранить ее где-нибудь в какой-либо структуре данных. Честно говоря, я не вижу большого преимущества в попытке избежать создания нового BitArray
объект для этой цели.