下载
Vanara.PInvoke.IpHlpApi
Install-Package Vanara.PInvoke.IpHlpApi -Version 1.0.12
由于只是简单使用,所以没做太多研究,只说大概思路
GetIfTable获得网络状态
得到的结果是一个列表,里面包含的很多信息,其中
dwInOctets 是进入流量
dwOutOctets是出口流量
分别取到这两个参数的总和,然后等待1秒钟
再重新分别取这两个值的和,就是瞬时流量
var iftable1 = IpHlpApi.GetIfTable();
long inSpeed1 = iftable1.Sum(m => m.dwInOctets);
long outSpeed1 = iftable1.Sum(m => m.dwOutOctets);
Thread.Sleep(1000);
var iftable2 = IpHlpApi.GetIfTable();
var inSpeed2 = iftable2.Sum(m => m.dwInOctets);
var outSpeed2 = iftable2.Sum(m => m.dwOutOctets);
var inSpeed = inSpeed2 - inSpeed1;
var outSpeed = outSpeed2 - outSpeed1;
var ada = IpHlpApi.GetInterfaceInfo();
ulong total = 0;
foreach (var a in ada.Adapter)
{
MIB_IF_ROW2 row = new MIB_IF_ROW2(a.Index);
IpHlpApi.GetIfEntry2(ref row);
if (row.InOctets > 0)
{
total += row.ReceiveLinkSpeed;
}
}
total = total / 8;
return new {
memoryLoad = memoryLoad,
cpuLoad = cpuLoad,
inSpeed = (double)inSpeed * 100 / Convert.ToDouble(total),
outSpeed = (double)outSpeed * 100 / Convert.ToDouble(total)
};
IpHlpApi.GetInterfaceInfo() 这个 函数获得网卡信息
ReceiveLinkSpeed 为网卡速度 猜测。。。
扫描二维码关注公众号,回复:
11326297 查看本文章
实测基本使用率,差不多。