我通过socket接收一些数据(带有一些开始和结束字符)。我可以使用一次接收一个字节的字节接收机制,将其添加到某种队列类型的事物中并接下来直到找到结束字符。或者我可以制作一个块接收器并找到一个结束字符来终止我的消息......
我的问题是,增加/减少缓冲区大小的成本是多少?在我看来,减小缓冲区大小应该增加内存,但增加缓冲区验证我将提高IO性能吗?
答案 0 :(得分:3)
永远不要在套接字应用程序中重新调整缓冲区大小。对于没有那么多同时操作的套接字应用程序可能无关紧要。但这是一个很容易习惯的坏习惯。
处理大于实际数据的缓冲区并不难。只需检查所有Stream方法。它们有一个offset和count属性,告诉你应该从哪里开始处理以及你可以处理多少字节。这里也是一样。
并回答你的问题:成本是.NET需要分配一个新的内存“插槽”,并且每个请求的内存都会更加分散。
连接套接字时,只需直接分配15kb缓冲区即可。如果可以处理每个连接的多个(异步)接收,则创建一个缓冲池。