gpt4 book ai didi

c# - ConcurrentQueue 中的所有项目都是相同的

转载 作者:行者123 更新时间:2023-11-30 19:24:53 32 4
gpt4 key购买 nike

我有一个 NetworkStream 用于从另一个程序获取数据。数据以 Byte[64] 的形式到达,然后我将其排队到 ConcurrentQueue,以便另一个线程可以出队以供稍后分析。队列被实例化:

ConcurrentQueue<byte[]> fifo = new ConcurrentQueue<byte[]>();

然后我将所有发送的数据加入队列:

Byte[] bytesIn = new Byte[64];
int i;
while ((i = stream.Read(bytesIn, 0, bytesIn.Length)) != 0)
{
fifo.Enqueue(bytesIn);
}

如果我随后查看(在调试期间)fifo 中的数据,就会发现其中包含的每个字节 [64] 都与最新的 bytesIn 相同。如何确保我添加到 fifo 的数组是值而不是指针(如果这是正确的术语)?

最佳答案

将数组的副本加入队列。您可以使用 ToArray为此的扩展。

while ((i = stream.Read(bytesIn, 0, bytesIn.Length)) != 0)
{
var received = bytesIn.Take(i).ToArray();
fifo.Enqueue(received);
}

我还使用了 Take修剪缓冲区,并仅复制接收到的字节。

或者,正如@hvd 在评论中所建议的那样,使用Array.Copy 会更快

while ((i = stream.Read(bytesIn, 0, bytesIn.Length)) != 0)
{
var received = new byte[i];
Array.Copy(bytesIn, 0, received, 0, i);

fifo.Enqueue(received);
}

关于c# - ConcurrentQueue<byte[]> 中的所有项目都是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521218/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com