gpt4 book ai didi

c# - 一个大字节缓冲区还是几个小字节缓冲区?

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

我正在学习 C# 异步套接字编程,我了解到在某种池中重用字节缓冲区是个好主意,然后在从套接字接收数据时根据需要检查一个。

但是,我看到了两种不同的字节数组池方法:一种使用简单的队列系统,并根据需要从队列中添加/删除它们。如果请求了一个并且队列中没有更多剩余,则会创建一个新的字节数组。

我见过的另一种方法是对整个程序使用一个大字节数组。队列的想法仍然适用,但它是一个整数队列,它确定要使用的字节数组的切片(偏移量)。如果请求了一个并且队列中没有剩余,则必须调整数组的大小。

对于高度可扩展的服务器,其中哪一个是更好的解决方案?我的直觉是只使用许多字节数组会更便宜,因为我想根据需要调整数组的大小(即使我们以大块分配它)会非常昂贵,尤其是当它变大时。使用多个阵列似乎也更直观 - 使用一个我没有想到的大型阵列是否有一些优势?

最佳答案

你的直觉是正确的。每次需要扩大数组时,都将重新创建数组并复制现有字节。由于我们在这里讨论的是字节,因此数组的大小可能会很快变大。因此,您每次都会要求一 block 连续的内存,这取决于您的程序使用内存的方式,这可能可行也可能不可行。这也将实际上成为一个虚拟池,可以这么说。根据定义,池具有一组由各种客户端管理和共享的多个项目。

单阵列解决方案实现起来也更加复杂。好处是单数组解决方案允许您给出可变大小的 block ,但这是以本质上重新实现 malloc 为代价的:处理碎片等,等等,您不应该涉及这些。

多数组解决方案允许您使用 N 个缓冲区初始化池,并以直接的方式轻松管理它们。绝对是我推荐的方法。

关于c# - 一个大字节缓冲区还是几个小字节缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/581936/

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