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