我想创建一个速度测试来测试连接。
我想要的是一个15秒的下载,然后给我平均下载速度。
任何人都知道如何创建这个?或者有更好的想法进行速度测试?
答案 0 :(得分:15)
此示例将尝试下载googletalk,然后输出下载的详细信息。
PS。当尝试时间和操作避免使用DateTime,因为它们可能导致问题或不稳定时,请始终使用System.Diognostics命名空间中提供的秒表。
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();
答案 1 :(得分:9)
正如publicENEMY所说,kay.one的答案可能会给出错误的速度,因为硬盘的速度可能低于网络速度(例如:Google千兆位)光纤比5200rpm硬盘的平均写入速度快得多
这是一个源自kay.one答案的示例代码,但会将数据内容下载到System.Byte[]
,因此会在内存中。
另外我注意到,在第一次下载后,速度急剧增加并超过实际网络速度,因为System.Net.WebClient
使用IE的下载缓存:根据我的要求,我只添加{{ 1}} querystring参数,对于每个请求都是唯一的。
修改强>
as.beaulieu发现使用t
进行计算的问题,包括非常快和非常慢的下载。
我们只需要使用TimeSpan.Seconds
。
TimeSpan.TotalSeconds
答案 2 :(得分:3)
我发现CodeProject上有一个库。这是一些C#类,可让您监控网络连接,包括上传和下载速度。 Link here
答案 3 :(得分:2)
下载文件如何为您提供正确的链接速度。 你通过下载文件获得的是对你得到的实际速度的低估。
我认为您应该进行一些udp类别的数据包传输,并找到在另一端接收它所需的时间。
的问候,
答案 4 :(得分:0)
在Visual Basic dot net中,“My”类提供了下载文件的功能,尝试在C#中搜索其别名。然后创建一个计时器计数器,并计算自下载开始以来经过的秒数。
答案 5 :(得分: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);
}
}
答案 6 :(得分:0)