PerformanceCounter基础知识:

参考

Performance Counter的使用

利用PerformanceCounter进行网卡流量监控

方法一:利用PerformanceCounter实例.NextValue()计算网卡下载速率
NextValue()使用注意(文章末尾)

namespace GPS222
{public partial class Form2 : Form{private PerformanceCounter mCounter;//当前计数器private void begin_n_Click(object sender, EventArgs e){timer2_net.Interval = 1000;//。1秒一次timer2_Tick事件timer2_net.Enabled = true;//初始化CounterPerformanceCounterCategory pcCategory = new PerformanceCounterCategory("Network Interface");string[] iNames = pcCategory.GetInstanceNames();//此函数第一次执行特别耗时(不知道为什么)PerformanceCounter[] pCounters = pcCategory.GetCounters(iNames[1]);//iNames[0]为"ASIX AX88772C USB2.0 to Fast Ethernet Adapter";iNames[1]为"Intel[R] Ethernet Connection [7] I219-V"//给网络监控计数器赋值mCounter = pCounters[0];mCounter.NextValue();//初始值  }private void timer2_net_Tick(object sender, EventArgs e){                         double SpeedKbps = mCounter.NextValue() * 8 / 1000;if ((SpeedKbps / 1000) > 1){SpeedSendToolLabel.Text = String.Format("{0:f1} Mbps", SpeedKbps / 1000); //得到该适配器的上传速度}else{SpeedSendToolLabel.Text = String.Format("{0:f1} Kbps", SpeedKbps); //得到该适配器的上传速度}}       

方法二(繁琐):自定义了两个类:MyNetWorkMatchClass和MyNetWorkMonitor,利用PerformanceCounter实例.NextSample().RawValue自行计算网卡上传下载速率(CaculateAndRefresh()函数)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Collections;
using System.Timers;
using System.Diagnostics;//Stopwatch\PerformanceCounternamespace WindowsFormsApplication2
{public partial class NetJiankongForm2 : Form{private MyNetWorkMatchClass[] m_MNWMadapters;private MyNetWorkMonitor monitor;public NetJiankongForm2(){InitializeComponent();}private void NetJiankongForm2_Load(object sender, EventArgs e){monitor = new MyNetWorkMonitor();m_MNWMadapters = monitor.Adapters; //获得控制器MyNetWorkMonitor上所有计算机的适配器列表if (m_MNWMadapters.Length == 0){listBox1.Enabled = false;MessageBox.Show("在计算机上没有找到网络适配器");return;}listBox1.Items.AddRange(m_MNWMadapters);}private void listBox1_SelectedIndexChanged(object sender, EventArgs e) //选中其中一个适配器{monitor.StopMonitoring();monitor.StartMonitoring(m_MNWMadapters[listBox1.SelectedIndex]); //控制该适配器开始工作this.timer1.Start(); //计时开始}private void timer1_Tick(object sender, EventArgs e) //计时开始,用于每秒钟改变显示速度{MyNetWorkMatchClass adapter = m_MNWMadapters[listBox1.SelectedIndex]; //该适配器textBox_Down.Text = String.Format("{0:n} kbps", adapter.DownloadSpeedKbps); //得到该适配器的下载速度textBox_Up.Text = String.Format("{0:n} kbps", adapter.UploadSpeedKbps); //得到该适配器的上传速度} }class MyNetWorkMonitor{private System.Timers.Timer Monitor_Timer; // 计时器事件执行每秒钟刷新值在适配器。private ArrayList m_AdaptersList; //该计算机的适配器列表。private ArrayList m_MonitoredAdapters; //目前控制的(需要Monitor的)适配器列表class MyNetWorkMonitor{private System.Timers.Timer Monitor_Timer; // 计时器事件执行每秒钟刷新值在适配器。private ArrayList m_AdaptersList; //该计算机的适配器列表。private ArrayList m_MonitoredAdapters; //目前控制的(需要Monitor的)适配器列表public MyNetWorkMonitor(){    m_AdaptersList = new ArrayList(); //用来保存获取到的计算机的适配器列表    m_MonitoredAdapters = new ArrayList(); //运行的有效的(需要Monitor的)适配器列表ShowNetAdapter(); //列举出安装在该计算机上面的适配器Monitor_Timer = new System.Timers.Timer(1000);Monitor_Timer.Elapsed += new ElapsedEventHandler(timer_ElapsedClick);//StartMonitoring方法中开启时钟}private void timer_ElapsedClick(object sender, ElapsedEventArgs e) //用于每秒钟刷新速度 {foreach (MyNetWorkMatchClass adapter in m_MonitoredAdapters) //每秒钟遍历有效的网络适配器{adapter.CaculateAndRefresh(); //刷新上传下载速度 }}private void ShowNetAdapter() //列举出安装在该计算机上面的适配器方法{PerformanceCounterCategory PCCCategory = new PerformanceCounterCategory("Network
Interface");string[] InstanceNames = PCCCategory.GetInstanceNames();foreach (string InstanceName in InstanceNames){if (InstanceName == "MS TCP Loopback interface")//?continue;// 创建一个实例Net workAdapter类别,并创建性能计数器它。MyNetWorkMatchClass myMNWMadapter = new MyNetWorkMatchClass(InstanceName);myMNWMadapter.m_Performance_Down = new PerformanceCounter("Network
Interface", "Bytes Received/sec", InstanceName);myMNWMadapter.m_Performance_Up= new PerformanceCounter("Network
Interface", "Bytes Sent/sec", InstanceName);               m_AdaptersList.Add(myMNWMadapter);}}public void StartMonitoring()//控制适配器开始工作(开启Monitor_Timer时钟){if(m_AdaptersList.Count > 0)//鲁棒性(防崩溃){foreach (MyNetWorkMatchClass myMNWMadapter in m_AdaptersList)if(!m_MonitoredAdapters.Contains(myMNWMadapter)){                       m_MonitoredAdapters.Add(myMNWMadapter);myMNWMadapter.Start();}Monitor_Timer.Enabled = true;}       }       public void StartMonitoring(MyNetWorkMatchClass myMNWMadapter) //控制该适配器开始工作(开启Monitor_Timer时钟){if(!m_MonitoredAdapters.Contains(myMNWMadapter)){               m_MonitoredAdapters.Add(myMNWMadapter);myMNWMadapter.Start(); //该适配器调用自己函数开始工作 }Monitor_Timer.Enabled = true;       }public void StopMonitoring()     {m_MonitoredAdapters.Clear();Monitor_Timer.Enabled = false;}public void StopMonitoring(MyNetWorkMatchClass adapter){if(m_MonitoredAdapters.Contains(adapter))m_MonitoredAdapters.Remove(adapter);if(m_MonitoredAdapters.Count == 0)Monitor_Timer.Enabled = false;}public MyNetWorkMatchClass[] Adapters //该控制类所控制的找出所有适配器的适配器列表{get{return (MyNetWorkMatchClass[])m_AdaptersList.ToArray(typeof(MyNetWorkMatchClass));}}}class MyNetWorkMatchClass{public override string ToString(){return m_strMatchName;}public string strMatchName//"ASIX AX88772C USB2.0 to Fast Ethernet Adapter"或"Intel[R] Ethernet Connection [7] I219-V"{get{return m_strMatchName;}}public long DownloadSpeed{get{return m_lDownLoadSpeed;}       }public long UploadSpeed{get{return m_lUpLoadSpeed;}}public double DownloadSpeedKbps{get{return this.m_lDownLoadSpeed*8/ 1000.0;//理论上应除以1024,但实际除以1000才与性能管理器中所显示吞吐量一致}} public double UploadSpeedKbps{get{return this.m_lUpLoadSpeed*8 /1000.0;//理论上应除以1024,但实际除以1000才与性能管理器中所显示吞吐量一致}}private long m_lDownLoadNetValues1; //当前的下载速度,***字节***计算(须*8变为bit才与性能管理器中所显示吞吐量一致)private long m_lUploadNetValues1; //当前的上传速度private long m_lDownLoadNetValues2; //一秒前的下载速度,***字节***计算(须*8变为bit才与性能管理器中所显示吞吐量一致)private long m_lUploadNetValues2; //一秒前的上传速度private string m_strMatchName; //此适配器的名字internal PerformanceCounter m_Performance_Down; //控制下载速度的流量计算中心internal PerformanceCounter m_Performance_Up; // //控制上传速度的流量计算中心private long m_lDownLoadSpeed; //每秒钟下载速度private long m_lUpLoadSpeed; //每秒钟上传速度public MyNetWorkMatchClass(string strComputerNetName){m_lDownLoadNetValues1 = 0;m_strMatchName =strComputerNetName;m_lUploadNetValues1 = 0;m_lDownLoadNetValues2 = 0;m_lUploadNetValues2 = 0;}//该适配器准备控制的方法函数public void Start(){m_lUploadNetValues1 =m_Performance_Up.NextSample().RawValue;m_lDownLoadNetValues1 =m_Performance_Down.NextSample().RawValue;}public void CaculateAndRefresh() //计算速度{m_lDownLoadNetValues2 =m_Performance_Down.NextSample().RawValue;m_lUploadNetValues2 =m_Performance_Up.NextSample().RawValue;m_lDownLoadSpeed =m_lDownLoadNetValues2 - m_lDownLoadNetValues1;m_lUpLoadSpeed = m_lUploadNetValues2- m_lUploadNetValues1;m_lDownLoadNetValues1 =m_lDownLoadNetValues2;m_lUploadNetValues1 =m_lUploadNetValues2;}}
}

参考

求助:用c#怎么测网卡的吞吐量,急用
C#流量监控源代码
C# 利用性能计数器监控网络状态

c#利用PerformanceCounter进行网卡流量监控相关推荐

  1. Nagios 网卡流量监控

    本文所用到的监控流量插件来自"石头"的 1.20 版 shell 插件.感谢之.... 下载地址为: 点击下载 . 总体设置可以分为两块, linux 主机及非 linux 主机. ...

  2. Linux网卡限速下载,端口限速下载脚本,网卡流量监控脚本

    限速脚本:命令 "./limitRate.sh help (帮助)" "./limitRate.sh stop (停止限速)"  "./limitRa ...

  3. shell脚本实现对网卡流量监控

    文章来源:http://blog.chinaunix.net/uid-108431-id-3256066.html 突然想对linux的网卡流量进行监控,又不想使用cacti,觉得配置snmp很麻烦. ...

  4. iftop工具(网卡流量监控软件)的使用

    直接运行iftop,不加任何参数 界面显示 界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的. 中间的<= =>这两个左右箭头,表示的是流量的方向. TX:发送流量 R ...

  5. 利用MRTG进行网络流量监控

    步骤 概念就不写了,此为win10环境下: 先下载两个工具mrtg-2.17.7和ActivePerl-5.8.4.810-MSWin32-x86 百度网盘链接链接: https://pan.baid ...

  6. Linux日常运维管理技巧(一)监控系统状态、监控网卡流量、监控IO性能、查看系统进程、查看网络状态、Linux下抓包tcpdump、Linux网络相关、DNS配置

    目录 监控系统状态 监控网卡流量 监控IO性能 查看系统进程 查看网络状态 Linux下抓包 Linux网络相关 监控系统状态 w/uptime查看系统负载 [root@zyshanlinux-01 ...

  7. html网络流量监控,Mrtg 网络流量监控

    #Cdp run 启用CDP #snmp-server community cisco ro(只读) :配置只读通信字符串为cisco #snmp-server community secret rw ...

  8. 【网络】流量监控 - iftop|ifstat|查看某个ip流量|tcpdump|iptraf|Linux

    目录 流量监控18个常用工具 tcpdump查看某个端口数据 ifstat iftop 四.运行iftop 五.相关参数及说明 1.iftop界面相关说明 2.iftop相关参数 常用的参数 按端口显 ...

  9. 用python实现实时监控网卡流量(类似 top 动态刷新)

    很多时候,我们是需要查看服务器的网卡当前跑了多大流量,但对于网卡流量的查询,在linux下似乎没有像top那样的原生命令.虽然top功能很强大,可以实时查看cpu.内存.进程的动态,但是却没有对网卡流 ...

最新文章

  1. 《学习vi编辑器》的学习笔记1
  2. vue及脚手架的下载安装,创建项目
  3. OpenCv cv::Mat 转 IplImage 函数
  4. Verifying Checksum ... Bad Data CRC ERROR: can#39;t get kernel image!
  5. RxJs SwitchMap 学习笔记
  6. get_children 方法里面参数 iv_as_copy 有什么用?
  7. 【POJ - 2486】Apple Tree (树形背包,dp)
  8. 三星s2 硬刷Android 8,三星T710(GALAXY Tab S2 8.0)一键救砖教程,轻松刷回官方系统...
  9. 为开发者准备的9个实用PHP代码片段(转)
  10. MySQL 性能优化--QueryCache的原理
  11. MySQL社区版下载地址
  12. 搭建一个网站步骤 制作网页完整步骤
  13. 期权期货和金融衍生品学习笔记 -- 第一章引言
  14. excel两列数据对比找不同_怎么在excel中对比两列数据并查找重复项?
  15. 报错:Web server failed to start. Port 8080 was already in use
  16. IE内核如何设置版本
  17. harmonyos导师姓名,HarmonyOS开发者创新大赛颁奖礼 见证星星之火燃爆盛夏
  18. 2018/2019款 MacBookPro 接口失灵的原因及解决方案
  19. 风控为本 开鑫金服让互联网金融更有安全感
  20. NSIS制作软件安装包

热门文章

  1. 光明日报:当教育遇上区块链,会擦出什么火花
  2. flask引用bootstrap4框架
  3. Hetian lab day3 LAMP环境搭建(Mac环境)
  4. 日期与时间函数与夏令时的关系
  5. CentOS6.6 如何进入单用户模式
  6. linux 自动同步时间命令,LINUX系统时间怎么设置同步脚本或命令?
  7. 【BZOJ-1095】[ZJOI2007] Hide 捉迷藏【线段树维护树直径】
  8. 李宏毅2022ML第五周课程笔记
  9. 网络连通性测试之telnet
  10. AI笔记: 计算机视觉之SIFT特征检测: 尺度空间、二维高斯函数、高斯金字塔