【问题标题】:C# socket receive buffer size costC# 套接字接收缓冲区大小成本
【发布时间】:2011-11-15 01:59:29
【问题描述】:

我正在通过套接字接收一些数据(带有一些开始和结束字符)。我可以使用一种应该一次接收一个字节的字节接收机制,将其添加到某种队列中,然后接收下一个直到找到结束字符。或者我可以制作一个块接收器并找到一个结束字符来终止我的消息......

我的问题是,增加/减少缓冲区大小的成本是多少?在我看来,减小缓冲区大小应该会增加内存 io,但增加缓冲区是否会验证我也会提高 IO 性能?

【问题讨论】:

  • 最重要的是...完整消息的大小约为 15 KB(平均)。

标签: sockets buffer


【解决方案1】:

永远不要在套接字应用程序中重新调整缓冲区的大小。对于没有那么多同时操作的套接字应用程序来说,这可能并不重要。但这是一个很容易习惯的坏习惯。

处理大于实际数据的缓冲区并不难。只需检查所有 Stream 方法。它们有一个 offset 和 count 属性,它告诉你应该从哪里开始处理以及你可以处理多少字节。这里也一样。

并回答您的问题:成本是 .NET 需要分配一个新的内存“插槽”,并且每个请求的内存都会变得更加碎片化。

在socket连接的时候直接分配一个15kb的缓冲区。如果每个连接可以处理多个(异步)接收,请创建一个缓冲池。

【讨论】:

  • 1.不,这是第一次活动...只会进行一次,2. 是的,确实不难... 3. 这就是我要寻找的点:) 谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多