C# 读取网络上下行(不要使用性能计数器的方式)

这篇具有很好参考价值的文章主要介绍了C# 读取网络上下行(不要使用性能计数器的方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C# 读取网络上下行有多种方式,其中有一种是使用System.Net.NetworkInformation命名空间中的NetworkInterface类和PerformanceCounter类,该方式其实读的是windows系统的性能计数器中的Network Interface类别的数据。

方式如下:

NetworkInterface networkInterface = NetworkInterface.GetAllNetworkInterfaces()
            .FirstOrDefault(i => i.Name.Equals(interfaceName, StringComparison.OrdinalIgnoreCase));

        if (networkInterface == null)
        {
            Console.WriteLine("Network interface not found.");
            return;
        }

        PerformanceCounter downloadCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", networkInterface.Description);
        PerformanceCounter uploadCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", networkInterface.Description);

        while (true)
        {
            float downloadSpeed = downloadCounter.NextValue();
            float uploadSpeed = uploadCounter.NextValue();

            Console.WriteLine($"Download Speed: {downloadSpeed} bytes/sec");
            Console.WriteLine($"Upload Speed: {uploadSpeed} bytes/sec");

            Thread.Sleep(1000); // 每秒更新一次网速
        }

但是使用性能计数器有时候会抛异常:

异常: System.InvalidOperationException: 类别不存在。
   在 System.Diagnostics.PerformanceCounterLib.CounterExists(String machine, String category, String counter)
   在 System.Diagnostics.PerformanceCounter.InitializeImpl()
   在 System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName, Boolean readOnly)
   在 System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName)

打开“性能监视器”,点击“性能”,报错

C# 读取网络上下行(不要使用性能计数器的方式)

 使用@TanZhiWei 的方式可以解决:https://www.cnblogs.com/terryK/p/17491818.html

C# 读取网络上下行(不要使用性能计数器的方式)

 

下面是使用WMI (Windows Management Instrumentation)的方式,该方式cpu保持在0~1%左右,可以不考虑性能问题:

 string interfaceName = "Ethernet"; // 指定网络接口的名称

        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface");
        ManagementObjectCollection objects = searcher.Get();

        foreach (ManagementObject obj in objects)
        {
            string name = obj["Name"].ToString();

            if (name.Equals(interfaceName, StringComparison.OrdinalIgnoreCase))
            {
                ulong bytesReceived = Convert.ToUInt64(obj["BytesReceivedPerSec"]);
                ulong bytesSent = Convert.ToUInt64(obj["BytesSentPerSec"]);

                Console.WriteLine($"Download Speed: {bytesReceived} bytes/sec");
                Console.WriteLine($"Upload Speed: {bytesSent} bytes/sec");

                break;
            }
        }

 如果再不行可能是网卡出异常了文章来源地址https://www.toymoban.com/news/detail-456381.html

到了这里,关于C# 读取网络上下行(不要使用性能计数器的方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 不要再说你不会了——网络性能问题排查思路

    服务监控系列文章 服务监控系列视频 网络问题往往是性能排查中最复杂的一个问题,因为网络问题往往涉及的链路比较长,排查起来不仅仅是看本地机器的指标就可以了。本文将展示一个比较系统的排查网络问题的思路。 我们往往都是通过类似prometheus,grafana搭建的监控平

    2023年04月13日
    浏览(36)
  • c# xml 参数读取的复杂使用

    生产厂家里面包含很多规格型号,一个规格型号里面包含很多出厂序列号,点击下一步如果检测到填充的和保存的不一样 就新增一条(如检测到生产厂家相同,但是规格型号不同,就新增一组规格型号)。 界面一:新增界面 界面2 删除界面 load 其中 因为直接使用了 节点名字

    2024年02月07日
    浏览(42)
  • C#中使用OpenCvSharp4库读取本地图像并显示

    OpenCvSharp4是基于.NET 的 OpenCV 包装器,OpenCV源代码是采用C和C++写的,目前对于C++和Python开发者相对来说比较友好,对于Python开发者而言官方提供了opencv-python使用。 首选我们使用Visual Studio 2022创建一个.Net控制台程序 ReadImageUseOpenCvSharp4 ,然后安装 OpenCvSharp4 安装包,我们在Vis

    2024年04月16日
    浏览(43)
  • C#图像处理-使用OpenCVSharp读取或修改图像像素值

    图像处理是计算机视觉领域的重要应用之一,而OpenCV是一个强大且广泛使用的开源计算机视觉库。在C#中,我们可以通过OpenCVSharp库来实现图像处理的各种功能,包括读取和修改图像像素值。本文将介绍如何使用OpenCVSharp来读取和修改图像像素值,并提供相应的源代码。 首先,

    2024年04月28日
    浏览(82)
  • 使用netdxf(C#)框架实现dxf文件读取与导出坐标

    窗体FormDxfTool.Designer.cs设计器源程序如下: 关键结构 netDxf.Vector3             可以认为是立体三维坐标(x,y,z) 关键结构 netDxf.Vector2             可以认为是平面二维坐标(x,y) DxfDocument用于读写dxf文件       关键函数Load()用于加载文件       添加实体:dxfDocument.Entities.Add(Ent

    2024年01月16日
    浏览(186)
  • unity C# 读取shp并生成mesh(ShpLoader使用)

    声明 使用 : Unity读取并解析Shapefile地图文件_SuperWiwi的博客-CSDN博客_unity读取shp 结构参考: 文件头_GIS基础工具篇01C#读写shp矢量文件_贱贱猪66的博客-CSDN博客 github:  https://github.com/EIdeallab/ShpLoader 注意问题:拿到数据后先Arcgis打开 1 编码格式   更多情况是数据来源自其它地方

    2024年02月11日
    浏览(67)
  • c#使用s7netplus读取plc数据

    关于plc仿真设置请看上一篇文章:http://t.csdn.cn/XQp2P 首先按转nuget包:S7netplus     这是官网:https://github.com/S7NetPlus/s7netplus/wiki 这里的环境使用的是.net core 控制台程序 首先在使用的地方引用 其中数据类型: 数据类涉及到最后的转换。需要留意 以上一篇文章博途数据块为例:

    2024年01月25日
    浏览(36)
  • C#使用第三方库ExcelDataReader读取excel数据并呈现

    之前有使用Oledb读取Excel的代码:C#读取excel数据并呈现 使用这种方式读取存在需要安装数据库引擎的隐患(如需要自取)

    2024年02月13日
    浏览(44)
  • 【OPC UA】使用C#读取OPC UA电液控数据

    OPC UA与OPC DA协议常见于工业生产中使用,例如煤矿的综采支架电液控系统。OPC UA 是OPC 的后继标准,只是后面增加了UA ,意指”统一架构”(Unified Architecture).它的主要目的是摆脱windows! 实现与平台无关的OPC.从OPC 演进到OPC UA,它的目的并没有改变,依然是为了实现分布式控制系统中

    2024年02月15日
    浏览(42)
  • 上下文切换性能篇

    现代操作系统都是多任务的分时操作系统,也就是说同时响应多个用户交互或同时支持多个任务处理,因为 CPU 的速度很快而用户交互的频率相比会低得多。所以例如在 Linux 中,可以支持远大于 CPU 数量的任务同时执行,对于单个 CPU 来说,其实任务并不是在同时执行,而是操

    2024年02月15日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包