首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#列表与网络字节数组效率的比较

C#列表与网络字节数组效率的比较
EN

Stack Overflow用户
提问于 2020-06-23 11:53:06
回答 1查看 470关注 0票数 2

好的,我试着用unity3d中自建的网码,用c#制作一个多人游戏,

问题是,由于我使用的是原始tcp,所以我需要将所有内容转换为byte[],但是我厌倦了使用Array.Copy。因为我保留了通过网络发送的每条消息的几个字节,作为一种消息标识符,我可以使用它来解释接收到的数据。

所以我的问题是,为了使这段代码对我自己更友好,使用字节列表而不是字节数组是不是一个糟糕的主意,一旦我准备好了要发送的消息,我就可以调用列表上的.ToArray了吗?

这对表演来说会很糟糕吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-23 12:02:53

作为处理套接字的一般规则:您通常应该使用超大数组(ArrayPool<byte>.Shared在这里很有用),然后使用接受byte[], int, int (offset+count)或ArraySegment<byte>Send重载,这样您就不会不断地重复复制东西,并且可以重用缓冲区。但是,坦率地说:您也可以查看“管道”;这是Kestrel使用的新的IO,它为您处理所有的缓冲区管理,所以您不必这么做。在核心框架中,管道目前主要以服务器为中心,但希望在.NET 5中作为“基石”的一部分加以改进--然而,客户端管道包装器在Pipelines.Sockets.Unofficial (在NuGet上)中是可用的。

明确地说:不,经常在ToArray()上调用List<byte>并不是让缓冲区更方便的好方法;这可能会起作用,但可能会导致GC阻塞,而且在您的套接字代码中也是不必要的开销。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62534051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档