15
A
回答
3
- 使用已知的文件大小和陷阱需要多長時間下載。 (使用兩個DateTime.now()s)
我發現CodeProject上有一個庫。這是幾個C#類,讓你監視你的網絡連接,包括上傳和下載速度。 Link here
0
在Visual Basic點網中,「我的」類提供了一個函數來下載文件,嘗試在C#中搜索其別名。然後創建一個計時器計數器並計算自下載開始以來的秒數。
15
此示例將嘗試下載googletalk,然後輸出下載的詳細信息。
ps。在嘗試計時和操作時避免使用DateTime,因爲它們可能會導致問題或不確定,因此請始終使用System.Diognostics命名空間中提供的Stopwatch。
const string tempfile = "tempfile.tmp";
System.Net.WebClient webClient = new System.Net.WebClient();
Console.WriteLine("Downloading file....");
System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
webClient.DownloadFile("http://dl.google.com/googletalk/googletalk-setup.exe", tempfile);
sw.Stop();
FileInfo fileInfo = new FileInfo(tempfile);
long speed = fileInfo.Length/sw.Elapsed.Seconds;
Console.WriteLine("Download duration: {0}", sw.Elapsed);
Console.WriteLine("File size: {0}", fileInfo.Length.ToString("N0"));
Console.WriteLine("Speed: {0} bps ", speed.ToString("N0"));
Console.WriteLine("Press any key to continue...");
Console.ReadLine();
2
如何下載文件給你正確的鏈接速度。 通過下載文件得到的結果是對實際速度的低估。
我認爲你應該做一些udp類型的數據包傳輸,並找到在另一端接收它所需的時間。
問候,
0
使用代碼使用C#來檢查網絡連接速度:
private long bytesReceivedPrev = 0;
private void CheckBandwidthUsage(DateTime now)
{
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
long bytesReceived = 0;
foreach (NetworkInterface inf in interfaces)
{
if (inf.OperationalStatus == OperationalStatus.Up &&
inf.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
inf.NetworkInterfaceType != NetworkInterfaceType.Tunnel &&
inf.NetworkInterfaceType != NetworkInterfaceType.Unknown && !inf.IsReceiveOnly)
{
bytesReceived += inf.GetIPv4Statistics().BytesReceived;
}
}
if (bytesReceivedPrev == 0)
{
bytesReceivedPrev = bytesReceived;
}
long bytesUsed = bytesReceived - bytesReceivedPrev;
double kBytesUsed = bytesUsed/1024;
double mBytesUsed = kBytesUsed/1024;
internetUsage.Add(now, mBytesUsed);
if (internetUsage.Count > 20)
{
internetUsage.Remove(internetUsage.Keys.First());
}
bytesReceivedPrev = bytesReceived;
}
private void CheckInternetSpeed(DateTime now)
{
WebClient client = new WebClient();
Uri URL = new Uri("http://sixhoej.net/speedtest/1024kb.txt");
double starttime = Environment.TickCount;
client.DownloadFile(URL, Constants.GetAppDataPath() + "\\" + now.Ticks);
double endtime = Environment.TickCount;
double secs = Math.Floor(endtime - starttime)/1000;
double secs2 = Math.Round(secs, 0);
double kbsec = Math.Round(1024/secs);
double mbsec = kbsec/100;
internetSpeed.Add(now, mbsec);
if (internetSpeed.Count > 20)
{
internetSpeed.Remove(internetSpeed.Keys.First());
}
client.Dispose();
try
{
// delete downloaded file
System.IO.File.Delete(Constants.GetAppDataPath() + "\\" + now.Ticks);
}
catch (Exception ex1)
{
Console.WriteLine(ex1.Message);
}
}
8
作爲publicENEMY稱,kay.one的回答會給人一種錯誤的速度,因爲硬盤的轉速可以更低(例如:Google千兆位光纖比5200rpm硬盤的平均寫入速度快得多)
這是一個衍生自kay.one的答案的示例代碼,但下載d ata內容轉換爲System.Byte[]
,因此在內存中。
此外,我注意到,第一個下載後,顯着的速度增加,並躍過實際網絡速度,因爲System.Net.WebClient
使用IE的下載緩存:對於我的要求,我只加了t
查詢參數,明確唯一爲每個請求。
編輯
as.beaulieu發現使用TimeSpan.Seconds
進行計算的問題,無論是速度非常快,非常緩慢的下載。
我們只需要使用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();
相關問題
- 1. C++:如何爲模板類創建小型速度測試?
- 2. cURL上傳/下載速度測試
- 3. 使用Java/Android測量下載速度
- 4. 使用Eclipse測量下載速度
- 5. 網頁速度測試:如何獲得理論加載速度
- 6. 測量下載速度
- 7. 測量下載速度Java
- 8. 如何測試上傳和下載速度到Flash Media Server?
- 9. 如何測試下載和上傳速度wifi/3G?
- 10. 從使用應用程序和最大下載速度的數據庫測試下載速度
- 11. 如何使用Apache FTPClient測量上傳/下載速度
- 12. 如何使用Java/Android正確測量下載速度
- 13. 如何使用Javascript檢測下載和上傳速度
- 14. NUnit .NET創建測試
- 15. 如何使用.Net IO類創建可測試的代碼?
- 16. C/C++算法速度測試儀
- 17. 如何使用ReSharper創建NUnit測試?
- 18. 如何使用Karma爲角度測試創建假服務
- 19. 負載測試連接速度慢
- 20. 在.NET Framework 4.5中啓用負載測試創建測試項目
- 21. 如何使用Visual Studio 2010創建Web服務負載測試?
- 22. 如何在C#.NET中獲得準確的下載/上傳速度?
- 23. 使用Adobe Flex進行速度測試
- 24. 如何使用windows API下載文件時創建進度條?
- 25. 什麼是下載速度測試的原理
- 26. 使用Neo4j .Net客戶端時邊緣創建速度太慢
- 27. 速度測試網站的C#代碼?
- 28. C#多線程的速度測試
- 29. 測試C#郵件發送速度
- 30. 如何快速創建用於測試目的的Web服務?
當試圖在非常好的級別剖析代碼時避免使用DateTime.Now()。但是對於像文件下載這樣的事情來說(這比現在的精度要長),這就好了。 – colithium 2009-07-05 20:47:31
或者使用'QueryPerformanceFrequency'和'QueryPerformanceCounter'作爲定時器。 – Icebob 2009-07-06 07:29:47