Пакет System.Memory содержит статический класс System.Buffers.Binary.BinaryPrimitives
, который включает статические методы для работы с "порядком байтов", включая многие перегрузки ReverseEndianness
. В ядре dotnet HostToNetWorkOrder
реализован с использованием этих ReverseEndianness
методов. В архитектуре с прямым порядком байтов (которая, я думаю, поддерживает все .NET) методы HostToNetworkOrder
и ReverseEndianness
имеют одинаковую производительность на dotnetcore.
В DotNet Framework (Net461), однако, производительность вызова HostToNetworkOrder
немного (не совсем в 2 раза) медленнее, чем вызов ReverseEndianness
.
Я полагаю, что JIT-компилятор на самом деле особый, в котором эти методы используются для вызова инструкции BSWAP x86. Если вы точно продублируете реализацию метода ReverseEndianness(long)
в своей собственной кодовой базе, это будет почти в 4 раза медленнее, чем вызов реализации System.Memory
; предполагая, что происходит магия JIT.