如何用C#获取任务管理器性能类别的网络收发速度
C# 获取网络接收与发送速度的可行方案
以下是基于.NET原生API的实现方案,无需依赖第三方库,稳定性和兼容性更好:
核心实现代码
using System; using System.Net.NetworkInformation; using System.Threading; class NetworkSpeedMonitor { private static long _prevReceivedBytes = 0; private static long _prevSentBytes = 0; static void Main(string[] args) { // 筛选可用网络接口(排除回环、未启用的接口) NetworkInterface targetInterface = null; foreach (var iface in NetworkInterface.GetAllNetworkInterfaces()) { if (iface.OperationalStatus == OperationalStatus.Up && !iface.NetworkInterfaceType.Equals(NetworkInterfaceType.Loopback)) { targetInterface = iface; break; } } if (targetInterface == null) { Console.WriteLine("未找到可用的活动网络接口"); return; } Console.WriteLine($"正在监控: {targetInterface.Name}"); Console.WriteLine("按任意键停止监控\n"); // 初始化基准字节数 var initialStats = targetInterface.GetIPv4Statistics(); _prevReceivedBytes = initialStats.BytesReceived; _prevSentBytes = initialStats.BytesSent; // 每秒采样一次计算速度 while (!Console.KeyAvailable) { Thread.Sleep(1000); CalculateAndShowSpeed(targetInterface); } } private static void CalculateAndShowSpeed(NetworkInterface iface) { var currentStats = iface.GetIPv4Statistics(); long receivedDiff = currentStats.BytesReceived - _prevReceivedBytes; long sentDiff = currentStats.BytesSent - _prevSentBytes; // 转换为KB/s(如需MB/s可再除以1024,Mbps则乘以8/1024) double receiveSpeed = receivedDiff / 1024.0; double sendSpeed = sentDiff / 1024.0; Console.WriteLine($"接收速度: {receiveSpeed:F2} KB/s | 发送速度: {sendSpeed:F2} KB/s"); // 更新基准值 _prevReceivedBytes = currentStats.BytesReceived; _prevSentBytes = currentStats.BytesSent; } }
关键说明
- 接口筛选逻辑:自动选取第一个处于启用状态的非回环网络接口,你也可以根据需要修改为指定名称的接口(比如通过
iface.Name匹配)。 - 速度计算方式:通过间隔1秒采样两次的字节数差值,计算每秒的传输速度,避免单次采样的误差。
- 权限要求:仅需普通用户权限即可运行,无需管理员权限(除非监控系统级特殊接口)。
如果之前的第三方方案无法运行,大概率是依赖库版本兼容问题或权限限制,这个原生方案可以规避这些问题。
内容的提问来源于stack exchange,提问作者Emircan Horuz
相关产品推荐
相关产品推荐

