透過 WebRequest/WebResponse 下載指定檔案(如測試圖片),記錄開始/結束時間與總位元組數,即可估算下載速度(Kbps)。程式碼示範完整流程:建立請求、取得回應串流、迴圈讀取位元組、計算耗時與速度、最後輸出結果。
DateTime stime = DateTime.Now;
WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
int totalBytes = (int)resp.ContentLength;
Stream stream = resp.GetResponseStream();
byte[] buffer = new byte[totalBytes];
int readBytes = 0, offset = 0;
while (readBytes > 0) {
readBytes = stream.Read(buffer, offset, totalBytes - offset);
offset += readBytes;
}
DateTime etime = DateTime.Now;
double seconds = (etime - stime).TotalSeconds;
double kbps = Math.Round(totalBytes * 8 / 1024 / seconds * 10.5) / 10; // 近似公式
Response.Write($"網絡速度 {kbps/8} KB/s 耗時 {seconds}s 檔案大小 {totalBytes}");
網絡速度 125.5 KB/s 圖片長度 12 耗時 0.85 文件大小 102400
「用一個頁面輸出 3MB 內容(迴圈寫入位元組),再以非同步請求該頁面,計算請求發出到收到最後一個位元組的時間差,即可得到更接近真實頻寬的下載速度。」
此法將「伺服器輸出時間」納入考量,適合需測試端到端傳輸效能的場景;但實作複雜度較高,需處理非同步回調與緩衝區控制。
| 方法 | 優點 | 缺點 |
|---|---|---|
| WebRequest 下載靜態檔 | 簡單、即時、無需額外頁面 | 僅反映靜態資源下載速度 |
| 動態產生大頁面 + 非同步抓取 | 含伺服器處理時間、更真實 | 實作複雜、佔用頻寬大 |
依據專案需求選擇:簡易監控用前者;頻寬品質驗收用後者。