2017-09-16 39 views
-3

我正在玩弄一個使用C#的TCP客戶端/服務器應用程序,我很困惑這兩種風格之間在通過網絡發送消息時使用哪種更好。在TCP中發送消息的哪種方法更受歡迎?

我遇到的第一種風格是將消息轉換爲字節數組,並使用NetworkStream.Write(*)方法將其寫入到TcpClient實例的NetworkStream中。

void StyleOne(string msg) 
{ 
      TcpClient client = new TcpClient(); 
      client.Connect(ip, port); 
      NetworkStream nwStream = client.GetStream(); 
      byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(msg); 

      nwStream.Write(bytesToSend, 0, bytesToSend.Length); 
      nwStream.Flush(); 
      client.Close(); 
} 

我遇到正在通過的TcpClient實例的的NetworkStream到一個StreamWriter,然後使用StreamWriter.Write()方法將消息寫入到流

void StyleTwo(string msg) 
{ 
      TcpClient client = New TcpClient(ip, port); 
      StreamWriter writer = New StreamWriter(client.GetStream()); 
      writer.Write(msg); 
      writer.Flush(); 
      client.Close(); 
} 

這兩個的是更有效的另一種樣式條款內存,速度和性能如果通過網絡發送的消息最多隻有兆字節大?

+0

第一種方法更好,因爲您知道編碼。 Ascii編碼將刪除不可打印的字符。 – jdweng

+0

[哪個更快?](https://ericlippert.com/2012/12/17/performance-rant/) –

回答

0

A StreamWriter實例始終使用相同的編碼(可以在其構造函數中指定),並且有一些便捷方法可以將不同類型的數據寫入流。

在你的第一個例子中,你或多或少地在做什麼StreamWriter會在底層做些什麼:應用編碼並將數據寫入基礎流。

如果您必須發送多位數據(使用相同的編碼),那麼使用StreamWriter會導致更清晰的代碼。對於只有一個string我不認爲這真的很重要你採取的方法。

+0

所以基本上,他們在做什麼和效率方面是一樣的?如果我使用這個 'StreamWriter writer = new StreamWriter(client.GetStream(),ASCIIEncoding.ASCII)創建'StreamWriter'的一個實例' 它會和第一個代碼片段一樣嗎?記憶力,速度等沒有差異? – ReiSchneider

+0

@ReiSchneider總是有一個區別,自己應用編碼的開銷要少一點。我確實認爲L.B_正試圖幫助,因爲很多人傾向於優化性能而不意識到他們的代碼變得非常混亂。如果不是這樣的話,請不要親自採訪:) –