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