2014-10-02 79 views
0

我有一个TCP/IP套接字并通过它与外部传感器设备进行通信。我们使用的专有协议具有设备可以随时向客户端发送数据包的功能。这被称为“事件”,非常像C#事件。改善套接字性能

我基本上实现了它这样的:

... 
socket.ReceiveTimeout = ResolveTimeout(timeout); 
while (...) 
{ 
    var buffer = new byte[count]; 
    int readBytes = socket.Receive(buffer, 0, count, SocketFlags.None); 
    ... 
} 

有了这个代码,应用受到糟糕的表现。我在一个分析器中测量了它,它告诉我Socket.Receive需要45%的时间。

有什么办法可以改善这种情况吗?

回答

1

这很可能是因为Socket.Receive()阻塞,直到数据可用。

尝试异步编程,使用Socket.BeginReceive()

+2

或等待[*'Socket.ReceiveAsync' *](http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.receiveasync(v = vs.110).aspx )如果你使用.NET 4.0或更高版本,并且可以使用'async-await' – 2014-10-02 16:32:12