TcpClient.Available优化

时间:2012-01-04 16:19:42

标签: c# .net tcp tcpclient

有没有更快的方法来判断客户端是否有可用的数据?我并不是说使用TcpClient.Available很慢,但我很想知道它是否是最快的方式。

2 个答案:

答案 0 :(得分:2)

TcpClient.Available本身并不慢,它只取决于你如何使用它。

如果你只是用它来检查是否有可用数据,那么就可以了。

如果您在循环中使用它以等待数据,程序的整体性能将非常糟糕。这是一个不好的用法:

public void Receive()
{
    while (tcpClient.Connected)
    {
        if (tcpClient.Available >= 0)
        {
            // Do something
        }
    }
}

对于第二种情况,您可以使用以下方法实现所需:

答案 1 :(得分:1)

如果您只需知道是否有可用的数据,并且您不打算对数据做任何事情,那么它可能是最快的方法。

但是,如果您正在轮询以确定是否有任何内容要读取,那么请使用异步I / O:启动异步读取操作(BeginRead),一旦任何数据到达,您将被调用以处理它。这比轮询更快(也更有效),看看是否有一些数据。