我想使用 C# .NET 通过网络接口获得准确的下载/上传速度
我知道可以使用以下方法计算GetIPv4Statistics().BytesReceived
并使线程休眠一段时间。但它并没有给出我在浏览器中得到的输出。
下面是来自 LINQPad 的一段快速代码。它使用非常简单的移动平均线。它使用“Speedtest.net”显示“准确的速度”。需要记住的是 Kbps 处于bitsHTTP 数据通常会被压缩,因此对于高度可压缩的数据,“下载的字节”会明显更小。另外,不要忘记,现在任何旧进程都可能在互联网上做任何旧事情(没有更严格的防火墙设置)..
我喜欢弗林登伯格的答案(不要改变接受),并且我注意到某些轮询周期会返回与他/她的结论一致的“0”。
使用后果自负。
void Main()
{
var nics = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();
// Select desired NIC
var nic = nics.Single(n => n.Name == "Local Area Connection");
var reads = Enumerable.Empty<double>();
var sw = new Stopwatch();
var lastBr = nic.GetIPv4Statistics().BytesReceived;
for (var i = 0; i < 1000; i++) {
sw.Restart();
Thread.Sleep(100);
var elapsed = sw.Elapsed.TotalSeconds;
var br = nic.GetIPv4Statistics().BytesReceived;
var local = (br - lastBr) / elapsed;
lastBr = br;
// Keep last 20, ~2 seconds
reads = new [] { local }.Concat(reads).Take(20);
if (i % 10 == 0) { // ~1 second
var bSec = reads.Sum() / reads.Count();
var kbs = (bSec * 8) / 1024;
Console.WriteLine("Kb/s ~ " + kbs);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)