我已經實現了一個文件傳輸速率計算器,以顯示在我的應用程序中發生的上傳過程的kB /秒,但使用以下代碼,似乎我在我的KB/s讀數中獲得「突發」文件開始上傳後。計算上傳傳輸速度問題
這是我的流的代碼的部分中,此流在1024塊到服務器中使用的HttpWebRequest一個文件:
using (Stream httpWebRequestStream = httpWebRequest.GetRequestStream())
{
if (request.DataStream != null)
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
Debug.WriteLine("File Start");
var duration = new Stopwatch();
duration.Start();
while (true)
{
bytesRead = request.DataStream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
break;
httpWebRequestStream.Write(buffer, 0, bytesRead);
totalBytes += bytesRead;
double bytesPerSecond = 0;
if (duration.Elapsed.TotalSeconds > 0)
bytesPerSecond = (totalBytes/duration.Elapsed.TotalSeconds);
Debug.WriteLine(((long)bytesPerSecond).FormatAsFileSize());
}
duration.Stop();
Debug.WriteLine("File End");
request.DataStream.Close();
}
}
現在上傳過程的輸出日誌和相關聯的Kb /秒讀數如下: (你會注意到一個新的文件開始,用「文件開始」和「文件結束」結束)
File Start
5.19 MB
7.89 MB
9.35 MB
11.12 MB
12.2 MB
13.13 MB
13.84 MB
14.42 MB
41.97 kB
37.44 kB
41.17 kB
37.68 kB
40.81 kB
40.21 kB
33.8 kB
34.68 kB
33.34 kB
35.3 kB
33.92 kB
35.7 kB
34.36 kB
35.99 kB
34.7 kB
34.85 kB
File End
File Start
11.32 MB
14.7 MB
15.98 MB
17.82 MB
18.02 MB
18.88 MB
18.93 MB
19.44 MB
40.76 kB
36.53 kB
40.17 kB
36.99 kB
40.07 kB
37.27 kB
39.92 kB
37.44 kB
39.77 kB
36.49 kB
34.81 kB
36.63 kB
35.15 kB
36.82 kB
35.51 kB
37.04 kB
35.71 kB
37.13 kB
34.66 kB
33.6 kB
34.8 kB
33.96 kB
35.09 kB
34.1 kB
35.17 kB
34.34 kB
35.35 kB
34.28 kB
File End
我的問題是,你會發現,在「爆」我一開始講的開始的每個新文件,在峯值達到峯值,然後平衡正常。這樣的上傳是否正常?我的上傳速度通常不會高於40k /秒,所以它不可能是正確的。
這是一個真正的問題,當我平均進行屏幕顯示的最後5到10秒時,它真的會拋出一些結果產生大約〜3MB/sec的結果!
任何想法,如果我接近這個問題的最佳途徑?我該怎麼辦? :S
格雷厄姆
另外:爲什麼我不能做 'bytesPerSecond = (bytesRead/duration.Elapsed.TotalSeconds)
' 和移動duration.Start & duration.Stop到while循環和接收準確的結果?我會認爲這會更準確?每個速度讀數爲900字節/秒,800字節/秒等。
感謝,以及循環不走高速每1024塊,但這也是順利更新進度條,這一切工作,並一直沒有問題。我認爲我已經通過調整我的平均值來等待一秒鐘來解釋我的問題,但是仍然不確定爲什麼會這樣爆發。 – GONeale 2009-11-09 12:28:19
增加了EDIT2。解釋更多 – EKS 2009-11-09 12:32:16
感謝EKS,你最大的幫助了我,我會看看我是否可以在以後進行優化。 – GONeale 2009-12-21 23:34:19