Есть ли лучший способ (см. ниже) добавить два байтовых массива в С#?
Притворяясь, что у меня есть полный контроль, я могу сделать первый массив байтов достаточно большим для хранения второго массива байтов в конце и использовать Array.CopyTo. Или я могу перебрать отдельные байты и выполнить назначение.
Есть ли лучшие способы? Я не могу себе представить, что вы делаете что-то вроде преобразования массивов байтов в строку и их присоединения, а их преобразование будет лучше, чем любой из вышеперечисленных методов.
С точки зрения лучшего/лучшего (по порядку):
- Fastest
- Максимальное потребление оперативной памяти
Ограничение состоит в том, что я должен работать в среде .NET 2.0.
Рекомендуются два варианта: MemoryStream и BlockCopy. Я пропустил простой тест скорости 10 000 000 циклов 3 раза и получил следующие результаты:
Среднее значение 3 пробега 10 000 000 циклов в миллисекундах:
- BlockCopy Time: 1154, с диапазоном в 13 миллисекунд
- MemoryStream GetBuffer Время: 1470, с диапазоном в 14 миллисекунд
- MemoryStream ToArray Время: 1895, с диапазоном 3 миллисекунды
- CopyTo Time: 2079, с диапазоном в 19 миллисекунд
- Байт по байтам Время: 2203, с диапазоном 10 миллисекунд
Результаты списка <byte> AddRange более 10 миллионов циклов: Список <byte> Время: 16694
Относительное потребление ОЗУ (1 - базовое, более высокое):
- Байт по байтам: 1
- BlockCopy: 1
- Копировать в: 1
- MemoryStream GetBuffer: 2.3
- MemoryStream ToArray: 3.3
- Список <byte> : 4.2
Тест показывает, что в общем случае, если вы не делаете много копий байта [ , которые я], просмотр байтовых копий не стоит особого внимания (например, 10 миллионов запусков дают разницу в 1,1 секунды].