2011-09-12 127 views
0

我正在通过套接字接收一些数据(带有一些开始和结束字符)。我可以使用一次接收一个字节的字节接收机制,将它添加到某种队列类型的东西中,并接收下一个字符,直到找到结束字符。或者我可以做一个大块接收器,并找到终止字符来终止我的消息...C#套接字接收缓冲区大小成本

我的问题是,增加/减少缓冲区大小的成本是多少?在我看来,减小缓冲区大小应该会增加内存IO,但增加缓冲区确认我将会增加IO性能?

+0

和最重要的事情...完整的消息大小是15 KB(平均)。 – Umer

回答

2

切勿重新调整套接字应用程序中的缓冲区大小。对于没有那么多同时操作的套接字应用程序可能无关紧要。但这是一个很容易习惯的坏习惯。

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

并回答你的问题:成本是,.NET需要分配一个新的内存“插槽”,并为每个请求的内存得到更多的碎片。

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

+0

1.不,这是第一次活动...将只有一次, 2.是的,它确实不难... 3.这是我一直在寻找的点:)谢谢。 – Umer