2014-10-02 119 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