我已經想通了,默認ReceiveBufferSize(8192)不爲我工作 - 我失去了包 Sockets: sometimes (rarely) packets are lost during receiving如何知道ReceiveBufferSize的設置?
但是MSDN有警告有關緩衝區大小增加:
http://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.receivebuffersize.aspx 較大的緩衝區大小可能減少空白確認的數量(沒有數據部分的TCP數據包),但也可能延遲對連接困難的識別。請考慮增加緩衝區的大小,如果您正在傳輸大文件,或者您使用的是高帶寬,高延遲連接(如衛星寬帶提供商。)
我知道,我需要得到每秒〜2000包和每個數據報包含約50-100個字節的數據。我正在使用低延遲連接(LAN中的所有內容)。我正在接收來自udp組播的股票交易數據,所以有時候我的明顯跳過跳躍(雷曼兄弟破產等),但我們假設我不會每秒收到超過20 000個數據包。
如何計算ReceiveBufferSize,將適合我的需要?
我絕對不同意失去數據包,但我不會失去性能比較或可靠性或其他任何東西爲好。
該言論是關於TCP。如果你使用TCP,那麼你首先不會有這個問題。 – 2012-03-23 12:41:20
@HansPassant但如何選擇ReceiveBufferSize?我可以將它設置爲100 MB並且不關心它嗎? – javapowered 2012-03-23 13:25:11
一旦我在接收組播數據(〜4000包/秒)時遇到同樣的問題。我將ReceiveBufferSize設置爲256K,問題消失。 (爲什麼256K?只是試驗&錯誤;)) – 2012-03-23 13:35:30