我有一个来自套接字连接的大 byte[] receiveBuffer,其中包含多个数据包。
我想将单个数据包传递到应用程序中的下一层,但我不想将每个数据包复制到一个新数组中。
我现在正在做这样的事情
fixed (byte* rxBufferPtr = receiveBuffer)
{
while(more_packets_in_rx_buf)
{
NewPacketReceived(rxBufferPtr + offset, packetSize);
// NewPacketReceived params: NewPacketReceived(byte* packet, int size)
offset += packetSize;
}
}
我想传递一个托管数组而不是指针和大小,新的 NewPacketReceived 参数将是:NewPacketReceived(byte[] packet)
我从不重复使用接收缓冲区,它已满后会创建一个新缓冲区。
最佳答案
不,你不能不复制。传递偏移量或长度是可行的方法。您不必不安全,它并不总是更快。 ArraySegment
结构可以帮助您将偏移量与数组一起传递。
关于C#,是否可以在没有副本的情况下将 byte* 转换为 byte[]?最快的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6849715/