2013-05-11 75 views
0

擁有一個像當我寫數據發送時TcpClient的NetworkStream?

  var stream = _tcpClient.GetStream(); 
      Serializer.Serialize(stream, message); 

代碼在哪裏Serialize能可能由字節調用Write字節我得到一點affraid - 當stream將數據發送到服務器?它會鎖定發送每個字節?我應該撥打flush以確保發送所有數據?寫入MemoryStream並寫入整個字節數組到stream會更有效嗎?

回答

2

你會想看看NoDelay屬性。只要這是錯誤的(這是默認值),TcpClient就不會在每次Write時發送一個數據包。它會緩衝起來,只有在感覺時間合適時才發送一個完整的數據包。 SendBufferSize的一些調整也可能有所幫助。

NetworkStream.Flush被記錄爲無效。

至於鎖定 - 不要擔心,直到你的配置文件告訴你這是一個問題。 :-)

+0

好的答案Jason – Drew 2013-05-11 02:09:04

+0

我應該提一下,至少在.NET 4.5中,我沒有看到任何流鎖,但我可能錯過了一個。 – 2013-05-11 02:09:44

相關問題