2013-08-31 41 views
1

我在C#中使用套接字。高效使用c中的套接字#

我使用這個連接:

client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
client.Connect(remoteEP); 

我送使用client.send消息...

我收到使用client.receive消息...

我已閱讀最大化使用套接字的性能我應該使用Ayscn套接字。

這是真的,是否有一個優化的緩衝區號使用?例如緩衝區[256](等)。

此外,在服務器端,我將線程分配給傳入的客戶端請求。一旦工作完成,我關閉了插座。我發現這是管理客戶的好方法,但我也發現這不是最好的方法。真的只需要建議最佳的方式去和爲什麼。

感謝..

+0

「Ayscn Sockets」?你可能意思是異步? –

+0

感謝您的拼寫更正.. –

+0

我知道這個問題已被問了很多次,但我得到了衝突的建議,所以這將是很高興看到如果有一個明確的答案.. –

回答

0

異步IO是當你有很多插座(遠遠超過CPU的數量)。在其他情況下,它不會改變性能配置文件(除了它稍微慢一些,因爲它有更多的開銷)。

異步是關於啓動和完成一個IO。 IO必須執行的實際工作不會改變。使用異步不能神奇地使網絡更快。

+0

嗨,謝謝你。這是我以後的清晰度。假設我設置一個緩衝區的字節數爲256位,並且總數據包很大(比如一個圖像或視頻),那麼這個過程會比如果我把緩衝區設置爲1024位長?反之亦然,如果緩衝區很大但數據包已知較小? (希望我解釋得很對) –

+0

理想情況下,緩衝區至少是可用數據的大小。我建議您分配一定大小的緩衝區並重新使用該緩衝區。根據連接速度有多快,您可以嘗試8KB或64KB的大小。不要低估快速連接,因爲這會導致大量的讀取調用(這是內核模式轉換)。 – usr