Như publicENEMY nói, câu trả lời của 's kay.one có thể cung cấp một tốc độ sai, bởi vì tốc độ của HDD có thể thấp hơn so với tốc độ mạng (ví dụ: Google Gigabit Fiber nhanh hơn tốc độ ghi trung bình của ổ cứng 5200rpm)
Đây là mã ví dụ có nguồn gốc từ câu trả lời của kay.one, nhưng tải xuống d nội dung ata thành System.Byte[]
và do đó trong bộ nhớ. Ngoài ra tôi nhận thấy rằng sau lần tải xuống đầu tiên, tốc độ tăng đáng kể và nhảy qua tốc độ mạng thực, vì System.Net.WebClient
sử dụng bộ nhớ cache tải xuống của IE: cho các yêu cầu của tôi, tôi chỉ thêm tham số truy vấn t
, rõ ràng là duy nhất cho mỗi yêu cầu .
EDIT
as.beaulieu tìm thấy một vấn đề sử dụng TimeSpan.Seconds
cho việc tính toán, cả hai đều cho tải rất nhanh và rất chậm.
Thay vào đó, chúng tôi chỉ cần sử dụng TimeSpan.TotalSeconds
.
Console.WriteLine("Downloading file....");
var watch = new Stopwatch();
byte[] data;
using (var client = new System.Net.WebClient())
{
watch.Start();
data = client.DownloadData("http://dl.google.com/googletalk/googletalk-setup.exe?t=" + DateTime.Now.Ticks);
watch.Stop();
}
var speed = data.LongLength/watch.Elapsed.TotalSeconds; // instead of [Seconds] property
Console.WriteLine("Download duration: {0}", watch.Elapsed);
Console.WriteLine("File size: {0}", data.Length.ToString("N0"));
Console.WriteLine("Speed: {0} bps ", speed.ToString("N0"));
Console.WriteLine("Press any key to continue...");
Console.ReadLine();
Nguồn
2017-01-02 11:30:00
Khi cố gắng để mã tiểu sử ở mức rất tốt nên tránh DateTime.Now(). Nhưng đối với một cái gì đó giống như một tập tin tải về (mà mất nhiều thời gian hơn so với độ chính xác của Now), nó chỉ là tốt. – colithium
Hoặc sử dụng 'QueryPerformanceFrequency' và 'QueryPerformanceCounter' làm bộ hẹn giờ. – Icebob
tại sao phải trải qua sự cố khi sử dụng bộ đếm hiệu suất hoặc thậm chí là DateTime.Now khi Đồng hồ bấm giờ dễ sử dụng và được xây dựng cho mục đích này. nó cũng làm cho mã của bạn dễ hiểu vì rõ ràng là bạn đang định thời gian một hàm. –