Bằng cách này dường như là hơi nhanh hơn so với phương pháp này trong câu hỏi ban đầu:
private static byte[] _temp = new byte[0];
public static void Swap(byte[] data)
{
if (data.Length > _temp.Length)
{
_temp = new byte[data.Length];
}
Buffer.BlockCopy(data, 1, _temp, 0, data.Length - 1);
for (int i = 0; i < data.Length; i += 2)
{
_temp[i + 1] = data[i];
}
Buffer.BlockCopy(_temp, 0, data, 0, data.Length);
}
điểm chuẩn của tôi cho rằng phương pháp này được gọi là liên tục, do đó thay đổi kích thước của mảng _temp
không phải là một yếu tố. Phương pháp này dựa trên thực tế là một nửa số trao đổi byte có thể được thực hiện với lệnh gọi Buffer.BlockCopy(...)
ban đầu (với vị trí nguồn được bù đắp bằng 1).
Hãy chuẩn bị điểm này cho chính mình, trong trường hợp tôi đã hoàn toàn mất trí. Trong các thử nghiệm của tôi, phương pháp này mất khoảng 70% miễn là phương pháp ban đầu (mà tôi đã sửa đổi để khai báo byte b
bên ngoài vòng lặp).
Giải pháp của bạn có vẻ giống như một giải pháp tốt, ngoại trừ NẾU DỮ LIỆU CỦA BẠN ĐƯỢC BAO GIỜ ĐƯỢC NGAY LẬP TỨC, mã của bạn sẽ ném mảng ra khỏi ngoại lệ bị ràng buộc. – NawaMan
Nếu anh ấy đổi 16 bit, thì dữ liệu của anh ấy sẽ không bao giờ có độ dài kỳ lạ. –
Có, đây sẽ là một phương pháp riêng tư và nó sẽ được đảm bảo có các từ 16 bit. – initialZero