主要有两个类,其一是NetworkAdapter,该类的作用是获取本机网络适配器列表,并且可以通过该类的属性获取当前网速数据;其二是NetworkMonitor,该类是通过.NET的PerformanceCounter(性能计数器组件)监测本机每一个网络适配器对应的当前网速状况(翻译得不大好,具体还是看原汁原味的代码吧:))

NetworkAdapter类

  1. using System;
  2. using System.Diagnostics;
  3.  
  4. namespace NetWorkSpeedMonitor
  5. {
  6. /// <summary>
  7. /// Represents a network adapter installed on the machine.
  8. /// Properties of this class can be used to obtain current network speed.
  9. /// </summary>
  10. public class NetworkAdapter
  11. {
  12. /// <summary>
  13. /// Instances of this class are supposed to be created only in an NetworkMonitor.
  14. /// </summary>
  15. internal NetworkAdapter(string name)
  16. {
  17. this.name = name;
  18. }
  19.  
  20. private long dlSpeed, ulSpeed; // Download/Upload speed in bytes per second.
  21. private long dlValue, ulValue; // Download/Upload counter value in bytes.
  22. private long dlValueOld, ulValueOld; // Download/Upload counter value one second earlier, in bytes.
  23.  
  24. internal string name; // The name of the adapter.
  25. internal PerformanceCounter dlCounter, ulCounter; // Performance counters to monitor download and upload speed.
  26. /// <summary>
  27. /// Preparations for monitoring.
  28. /// </summary>
  29. internal void init()
  30. {
  31. // Since dlValueOld and ulValueOld are used in method refresh() to calculate network speed, they must have be initialized.
  32. this.dlValueOld = this.dlCounter.NextSample().RawValue;
  33. this.ulValueOld = this.ulCounter.NextSample().RawValue;
  34. }
  35. /// <summary>
  36. /// Obtain new sample from performance counters, and refresh the values saved in dlSpeed, ulSpeed, etc.
  37. /// This method is supposed to be called only in NetworkMonitor, one time every second.
  38. /// </summary>
  39. internal void refresh()
  40. {
  41. this.dlValue = this.dlCounter.NextSample().RawValue;
  42. this.ulValue = this.ulCounter.NextSample().RawValue;
  43.  
  44. // Calculates download and upload speed.
  45. this.dlSpeed = this.dlValue - this.dlValueOld;
  46. this.ulSpeed = this.ulValue - this.ulValueOld;
  47.  
  48. this.dlValueOld = this.dlValue;
  49. this.ulValueOld = this.ulValue;
  50. }
  51. /// <summary>
  52. /// Overrides method to return the name of the adapter.
  53. /// </summary>
  54. /// <returns>The name of the adapter.</returns>
  55. public override string ToString()
  56. {
  57. return this.name;
  58. }
  59. /// <summary>
  60. /// The name of the network adapter.
  61. /// </summary>
  62. public string Name
  63. {
  64. get { return this.name; }
  65. }
  66. /// <summary>
  67. /// Current download speed in bytes per second.
  68. /// </summary>
  69. public long DownloadSpeed
  70. {
  71. get { return this.dlSpeed; }
  72. }
  73. /// <summary>
  74. /// Current upload speed in bytes per second.
  75. /// </summary>
  76. public long UploadSpeed
  77. {
  78. get { return this.ulSpeed; }
  79. }
  80. /// <summary>
  81. /// Current download speed in kbytes per second.
  82. /// </summary>
  83. public double DownloadSpeedKbps
  84. {
  85. get { return this.dlSpeed / 1024.0; }
  86. }
  87. /// <summary>
  88. /// Current upload speed in kbytes per second.
  89. /// </summary>
  90. public double UploadSpeedKbps
  91. {
  92. get { return this.ulSpeed / 1024.0; }
  93. }
  94. }
  95. }

NetworkMonitor类

  1. using System;
  2. using System.Timers;
  3. using System.Collections;
  4. using System.Diagnostics;
  5.  
  6. namespace NetWorkSpeedMonitor
  7. {
  8. /// <summary>
  9. /// The NetworkMonitor class monitors network speed for each network adapter on the computer,
  10. /// using classes for Performance counter in .NET library.
  11. /// </summary>
  12. public class NetworkMonitor
  13. {
  14. private Timer timer; // The timer event executes every second to refresh the values in adapters.
  15. private ArrayList adapters; // The list of adapters on the computer.
  16. private ArrayList monitoredAdapters;// The list of currently monitored adapters.
  17.  
  18. public NetworkMonitor()
  19. {
  20. this.adapters = new ArrayList();
  21. this.monitoredAdapters = new ArrayList();
  22. EnumerateNetworkAdapters();
  23.  
  24. timer = new Timer();
  25. timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
  26. }
  27. /// <summary>
  28. /// Enumerates network adapters installed on the computer.
  29. /// </summary>
  30. private void EnumerateNetworkAdapters()
  31. {
  32. PerformanceCounterCategory category = new PerformanceCounterCategory("Network Interface");
  33.  
  34. foreach (string name in category.GetInstanceNames())
  35. {
  36. // This one exists on every computer.
  37. if (name == "MS TCP Loopback interface")
  38. continue;
  39. // Create an instance of NetworkAdapter class, and create performance counters for it.
  40. NetworkAdapter adapter = new NetworkAdapter(name);
  41. adapter.dlCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", name);
  42. adapter.ulCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", name);
  43. this.adapters.Add(adapter); // Add it to ArrayList adapter
  44. }
  45. }
  46.  
  47. private void timer_Elapsed(object sender, ElapsedEventArgs e)
  48. {
  49. foreach (NetworkAdapter adapter in this.monitoredAdapters)
  50. adapter.refresh();
  51. }
  52. /// <summary>
  53. /// Get instances of NetworkAdapter for installed adapters on this computer.
  54. /// </summary>
  55. public NetworkAdapter[] Adapters
  56. {
  57. get { return (NetworkAdapter[])this.adapters.ToArray(typeof(NetworkAdapter)); }
  58. }
  59. /// <summary>
  60. /// Enable the timer and add all adapters to the monitoredAdapters list,
  61. /// unless the adapters list is empty.
  62. /// </summary>
  63. public void StartMonitoring()
  64. {
  65. if (this.adapters.Count > )
  66. {
  67. foreach (NetworkAdapter adapter in this.adapters)
  68. if (!this.monitoredAdapters.Contains(adapter))
  69. {
  70. this.monitoredAdapters.Add(adapter);
  71. adapter.init();
  72. }
  73.  
  74. timer.Enabled = true;
  75. }
  76. }
  77. /// <summary>
  78. /// Enable the timer, and add the specified adapter to the monitoredAdapters list
  79. /// </summary>
  80. public void StartMonitoring(NetworkAdapter adapter)
  81. {
  82. if (!this.monitoredAdapters.Contains(adapter))
  83. {
  84. this.monitoredAdapters.Add(adapter);
  85. adapter.init();
  86. }
  87. timer.Enabled = true;
  88. }
  89. /// <summary>
  90. /// Disable the timer, and clear the monitoredAdapters list.
  91. /// </summary>
  92. public void StopMonitoring()
  93. {
  94. this.monitoredAdapters.Clear();
  95. timer.Enabled = false;
  96. }
  97. /// <summary>
  98. /// Remove the specified adapter from the monitoredAdapters list, and
  99. /// disable the timer if the monitoredAdapters list is empty.
  100. /// </summary>
  101. public void StopMonitoring(NetworkAdapter adapter)
  102. {
  103. if (this.monitoredAdapters.Contains(adapter))
  104. this.monitoredAdapters.Remove(adapter);
  105. if (this.monitoredAdapters.Count == )
  106. timer.Enabled = false;
  107. }
  108. }
  109. }

Form关键代码

  1. using NetWorkSpeedMonitor;
  2.  
  3. private NetworkAdapter[] adapters;
  4. private NetworkMonitor monitor;
  5.  
  6. private void FormMain_Load(object sender, System.EventArgs e)
  7. {
  8. monitor = new NetworkMonitor();
  9. this.adapters = monitor.Adapters;
  10. /* If the length of adapters is zero, then no instance
  11. * exists in the networking category of performance console.*/
  12. if (adapters.Length == )
  13. {
  14. this.ListAdapters.Enabled = false;
  15. MessageBox.Show("No network adapters found on this computer.");
  16. return;
  17. }
  18. this.ListAdapters.Items.AddRange(this.adapters);
  19. }
  20.  
  21. private void ListAdapters_SelectedIndexChanged(object sender, System.EventArgs e)
  22. {
  23. monitor.StopMonitoring();
  24. // Start a timer to obtain new performance counter sample every second.
  25. monitor.StartMonitoring(adapters[this.ListAdapters.SelectedIndex]);
  26. this.TimerCounter.Start();
  27. }
  28.  
  29. private void TimerCounter_Tick(object sender, System.EventArgs e)
  30. {
  31. NetworkAdapter adapter = this.adapters[this.ListAdapters.SelectedIndex];
  32. /* The DownloadSpeedKbps and UploadSpeedKbps are double values. You can also
  33. * use properties DownloadSpeed and UploadSpeed, which are long values but
  34. * are measured in bytes per second. */
  35. this.LableDownloadValue.Text = String.Format("{0:n} kbps", adapter.DownloadSpeedKbps);
  36. this.LabelUploadValue.Text = String.Format("{0:n} kbps", adapter.UploadSpeedKbps);
  37. }

C# 监控网速的更多相关文章

  1. iOS开发——实时监控网速(仅作参考,发现一点问题)

    开发中用到获取网速的地方,应该就两种: 1.下载速度,这种可以直接在接受数据的地方统计计算.这个就不讲了. 2.获取手机网卡的数据,可以监控网卡的进出流量,下面就是. #import "Vi ...

  2. linux 实时监控网速脚本(转)

    #!/bin/bash ethn=$ while true do RX_pre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{pri ...

  3. iOS 直播-网速监控

    iOS 直播-网速监控 CXNetworkSpeed.h // // CXNetworkSpeed.h // CXNetworkSpeedDemo // // Created by xubaoaich ...

  4. Nload(CentOS网速的实时监控)

    Nload(CentOS网速的实时监控)的安装和安装过程中的问题 I. 安装 Download the latest rpmforge-release rpm from wget ftp://ftp. ...

  5. linux网络监控_网速测试

    Linux下查看网络即时网速 1.sar命令(一般般) sar -n DEV 1 100 1代表一秒统计并显示一次 100代表统计一百次 sar在sysstat包 2.使用ntop图形工具(没详细用过 ...

  6. 网速监控-nload

    用来监控系统网卡实时网速的. 安装 yum install nload -y # 或 apt install nload -y 使用 # 直接运行默认监控第一个网卡, 使用上下方向键来切换网卡. nl ...

  7. shell小脚本--网速监控

    在windows中,我们可以在360等管家软件中显示网速,在linux下想要查看实时的网速怎么办呢?当然在linux下也有很多优秀的软件可以实时显示网络状况!但是在这里我们使用shell脚本来先完成网 ...

  8. 【树莓派】Linux 测网速及树莓派源

    这篇文章比较杂,其中包含三点:linux环境中测试网络速度,树莓派下载软件的源,部分我写好的脚本: 一.Linux 测网速 Linux 测网速: sar -n DEV 1 100 1代表一秒统计并显示 ...

  9. 媲美5G的Wifi网速、“备战”资产一键领……揭秘双11小二背后的保障力量

    如今,双11不光是购物狂欢节,更是对技术的一次“大考”,对于阿里巴巴企业内部运营的基础保障技术而言,亦是如此. 回溯双11历史,这背后也经历过“小米加步枪”的阶段:作战室从随处是网线,交换机放地上的“ ...

随机推荐

  1. Django-08-admin

    1. 介绍 admin是django强大功能之一,它能共从数据库中读取数据,呈现在页面中,进行管理.默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经够用,但是有时候,一些特殊的功能还需 ...

  2. Django框架之第五篇(模板层) --变量、过滤器、标签、自定义标签、过滤器,模板的继承、模板的注入、静态文件

    模板层 模板层就是html页面,Django系统中的(template) 一.视图层给模板传值的两种方法 方式一:通过键值对的形式传参,指名道姓的传参 n = 'xxx'f = 'yyy'return ...

  3. 超全、超详的Spring Boot配置讲解笔记

    springboot默认加载配置 SpringBoot使用两种全局的配置文件,全局配置文件可以对一些默认配置进行修改. application.properties application.yml 这 ...

  4. yii框架中的各种小问题

    1.默认路径的修改 2.分页的做法

  5. springboot使用HttpSessionListener 监听器统计当前在线人数

    概括: request.getSession(true):若存在会话则返回该会话,否则新建一个会话. request.getSession(false):若存在会话则返回该会话,否则返回NULL ht ...

  6. Redis 集群:CLUSTERDOWN The cluster is down

    1.错误 (error)CLUSTERDOWN The cluster is down 2.问题表现 Java项目使用redis集群时报错, HTTP Status 500 - Could not g ...

  7. 使用NODEJS实现JSONP的实例

    JSONP与JSON只有一字之差,我们在使用Jquery的Ajax调用的时候也是使用相同的方法来调用,两者的区别几乎只在于使用的dataType这个属性的不同.但是实际上JSON和JSONP是完全不同 ...

  8. Ubuntu中使用sanp一键安装安装Notepad ++

    很少有文本编辑器像Notepad ++一样流行得到广大用户的喜爱,Notepad ++是一个免费的开源代码编辑器,专为Windows构建,用C ++编写.以其小巧的应用程序大小和出色的性能而闻名,但缺 ...

  9. 【强烈推荐】ok-admin 一个好看又好用的后台模版!!!

    ok-admin 一个很赞的,扁平化风格的,响应式布局的后台管理模版,旨为后端程序员减压! 目前一共有两个版本:ok-admin v1.0和ok-admin v2.0可自由选择! 源码地址:https ...

  10. Node中require第三方模块的规则

    Node.js中使用CommonJs模块化机制,通过npm下载的第三方包,我们在项目中引入第三方包都是:let xx = require('第三方包名'),究竟require方法加载第三方包的原理机制 ...