2012-06-03 27 views
6

我正在寫使用的HttpWebRequest上傳大文件到Web服務的應用萎縮緩衝。發送大文件,HttpWebRequest的,成長/根據需要

這個應用程序將通過不同的人有各種互聯網的速度運行。

我異步讀取數據塊文件,並異步寫入這些數據塊的請求流。我使用回調在循環中執行此操作。我一直這樣做直到整個文件被髮送。

被寫入之間算出的上載的速度和GUI隨後更新以顯示所述速度。

我面臨的問題是決定緩衝區大小。如果我設置得太大,連接速度慢的用戶將無法看到頻繁更新的速度。如果我做得太小,連接快速的用戶最終會「敲擊」讀/寫方法,導致CPU使用率激增。

我現在正在做的是在128kb開始緩衝區關閉,然後每10次寫入一次,我檢查這10次寫入的平均寫入速度,如果不到一秒鐘,我將緩衝區大小增加128kb。如果寫入速度低於5秒,我也會以類似的方式縮小緩衝區。

這工作得很好,但是這一切都感覺很隨意,它好像有改進的餘地。我的問題是,有沒有人處理過類似的情況,你採取了什麼行動?

謝謝

+1

這似乎是一個非常可靠的方法。它也起作用。我不會改變它。 – zmbq

回答

0

我認爲這是一個很好的方法。我也用於大文件上傳。但那裏有一個小小的週末。我通過撥打我的不同服務來確定第一個請求中的連接速度。這實際上可以節省每次請求重新計算速度的開銷。這樣做的主要原因是

  1. 在慢速連接,速度通常波動很大。因此,重新計算每個請求都沒有意義。

  2. 我本來是要提供簡歷設施還當用戶將能夠從那裏最後一次結束點重新上載文件。

考慮到可擴展性,我用第一個請求修復緩衝區。讓我知道它是否有幫助

+0

我按照我提到的方式結束了它,它工作得很好。我從來不喜歡按照你提到的方式來降低速度的想法,因爲如果主人在不同的國家或者日子過得很慢,它會給出錯誤的讀數。不過你提出了一些好的觀點。接受你的答案。 – NoPyGod

相關問題