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 объект для этой цели.

Другие вопросы по тегам