2010-12-16 83 views
1

我想使用TcpClient創建帶寬估計工具。我所面臨的問題是,我想在預定義的時間內執行測量(而不是預定義的緩衝區數據傳輸長度)。如果我使用循環(重複傳輸小塊數據),會不會降低性能(手動碎片vs自動碎片)?TcpClient帶寬估計

回答

1

這取決於您是否禁用Nagle算法。如果你這樣做,那麼是的,你會自己分割東西。如果你不這樣做,你不可能實現你的目標 - 因爲當你認爲它的數據可能不是實際上是 ......除非連接的另一端當然發回最後的「確認」。

我建議你使用一個小樣本來計算出粗糙的速度,然後根據它創建一個更大的樣本,預測它需要多長時間。無論如何,你需要測量時間 - 這不像你打預定時間的準確 - 所以它不應該有太大的不同。無論如何,你總是可以在一定程度上調整大小 - 我預計你最終會發送大量數據包,除非它是一個非常慢的網絡,所以如果你決定中途只發送200K而不是300K,這應該沒有太大的區別。

這可能聽起來像你的原始建議,當然 - 但我只是在談論每個呼叫發送「相當大」的數據塊......說16K。 (無論如何,它比分組大小要大得多)。這應該不會影響分段,但仍然可以讓你在進行時稍微調整一些東西。我不會建議你發送微小的小包。

+0

請原諒我問,但我真的不明白。如我錯了請糾正我。如果我禁用nagle算法,我必須通過重複發送小塊數據來手動分割我的數據。如果我不禁用nagle算法,我的數據將被自動分割。如果我不禁用nagle算法,我不可能實現我的目標(帶寬估計?),因爲發送的數據實際上可能在我認爲收到時沒有收到。有點困惑在這裏。 – 2010-12-16 07:30:22

+0

@publicENEMY:我應該澄清一下......如果你可以讓連接的另一端在收到所有內容時給你一些價值 - 在應用層面有效地使「ack」可見 - 那麼它會好起來的......略微在發送端的計算能力方面效率不高,但與網絡時間相比不太可能是重要的。 – 2010-12-16 07:33:21

+0

這裏我認爲tcp是可靠的(保證收到正確的數據)。是說如果我禁用老鷹,不保證發送的數據被接收? – 2010-12-16 08:09:34