使用C# 获取网卡使用率

      使用C# 获取网卡使用率已关闭评论

下载

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 为网卡速度   猜测。。。

实测基本使用率,差不多。

© 2018, RuiJi 社区. 版权所有.转载请注明出处