Самый эффективный способ xor массива байтов в vb.net

Я делаю приложение в vb.net, которое будет читать файлы, используя массив байтов в качестве буфера, и создавать для них файлы четности путем xoring данных... Какой будет наиболее эффективный способ xoring массива байтов? Я хотел преобразовать массив байтов в битовый массив, а затем запустить его с помощью операции xor и вернуть его обратно в массив байтов, но это звучит как очень дорогая задача обработки, и я беспокоюсь, что это может повлиять на скорость чтения/записи ... Есть лучший способ сделать это? Благодарность...

Чтобы избежать путаницы: то, что делает приложение, читает половину файла в местоположение 1, другую половину в местоположение 2, затем четность (исключающее ИЛИ двух частей) в местоположение 3...


person Daniel Valland    schedule 15.03.2014    source источник


Ответы (2)


Для двухбайтовых массивов Xor просто используйте цикл for и оператор Xor.

Xor VB.Net скомпилируется в CIL код операции Xor, который впоследствии должен быть JIT-скомпилирован в очень быстро x86 инструкция процессора XOR.

Стоимость операции Xor, скорее всего, будет незначительной по сравнению со стоимостью файлового ввода-вывода.

person Phillip Trelford    schedule 15.03.2014

В зависимости от того, что вы подразумеваете под «эффективным», я думаю, вы можете добиться большего успеха, чем простой цикл. Мой первоначальный вариант состоит в том, чтобы разбить обработку на несколько потоков. так быстрее завершится. Вы знаете размер входного массива и, следовательно, выходного массива, поэтому было бы легко разделить нагрузку и позволить каждому потоку заполнить соответствующую часть результата.

Существует статья С# о проекте кода, которая делает то же самое. Двоичные операции над байтовыми массивами с параллелизмом

person Karl Kieninger    schedule 15.03.2014
comment
Под эффективностью я подразумеваю стоимость обработки, которая преобразуется в скорость чтения/записи. Поскольку этот процесс включает в себя чтение и запись файлов, мне нужно решение, которое не ограничивает скорость чтения/записи жесткого диска из-за чрезмерной нагрузки на процессор. Предположим, что я использую цикл, который выполняет операцию xor для каждого байта. Тогда процессор будет иметь максимальную обработку X байт/с. Жесткий диск также имеет скорость записи/чтения X байт/с. если процессор имеет меньшую емкость X байт/с, чем чтение/запись жестких дисков, результатом будет более низкая скорость чтения/записи. Тогда эффективный означает код, который может выполнять операцию xor с наибольшим количеством байтов /s... - person Daniel Valland; 16.03.2014
comment
Другая проблема заключается в том, что если у меня есть файл с размером, который не делится на два, что мне делать с последним байтом с точки зрения разделения файла на два... - person Daniel Valland; 16.03.2014
comment
Я согласен с @Phillip Trelford в том, что стоимость процессора почти наверняка будет незначительной по сравнению со стоимостью файлового ввода-вывода. То, как вы решите обрабатывать нечетный байт, в основном не имеет отношения к эффективности. Я бы, вероятно, дополнил короткую половину 0 байтами при загрузке и назвал бы это хорошим. - person Karl Kieninger; 16.03.2014