首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得网络利用率、链接速度和适配器状态的信息,如任务管理器的“网络”选项卡所示?

如何获得网络利用率、链接速度和适配器状态的信息,如任务管理器的“网络”选项卡所示?
EN

Stack Overflow用户
提问于 2015-08-12 06:50:50
回答 1查看 1.9K关注 0票数 3

我需要在我的win表单程序中显示与任务管理器中显示的相同的信息。

我也想为远程计算机显示相同的信息。如果我有任何其他系统的ip连接到我的系统,那么我也可以得到相同的信息系统。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-12 07:17:33

为了获得关于网络适配器的简单信息,您应该使用NetworkInterface。它为网络接口提供配置和统计信息。

代码语言:javascript
运行
复制
public void EchoNetworkInformation()
{
   System.Net.NetworkInformation.NetworkInterface[] nics;
   nics = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();
       foreach (var nic in nics)
        {
            if (nic.NetworkInterfaceType != NetworkInterfaceType.Wireless80211 && nic.NetworkInterfaceType != NetworkInterfaceType.Ethernet)
                continue;

           Console.WriteLine("Adapter name: " + nic.Name);
           Console.WriteLine("Link speed: " + nic.Speed);
           Console.WriteLine("State: " + nic.OperationalStatus);

           var utilization = GetNetworkUtilization(nic.Description);
           Console.WriteLine("Network utilization", utilization);

        }
}

关于网络使用-它更复杂。它使用以下公式进行网络利用:

代码语言:javascript
运行
复制
%utilization = ((8*(dataSent + dataReceived))/bandwidth*time_in_sec)) * 100

我在计算方面找到了很棒的文章。你可以在这里找到一些有用的信息。

为了减少您的时间,您可以使用此代码来解决此任务。它使用提供性能信息的PerformanceCounter

代码语言:javascript
运行
复制
/// <summary> Calculate network utilization </summary>
/// <param name="networkCard">Description of network card from NetworkInterface</param>
/// <returns>NetworkUtilization</returns>
public static double GetNetworkUtilization(string networkCard)
{
   const int numberOfIterations = 10;

   // Condition networkCard;
   networkCard = networkCard.Replace("\\", "_");
   networkCard = networkCard.Replace("/", "_");
   networkCard = networkCard.Replace("(", "[");
   networkCard = networkCard.Replace(")", "]");
   networkCard = networkCard.Replace("#", "_");

   var bandwidthCounter = new PerformanceCounter("Network Interface", "Current Bandwidth", networkCard);

   var bandwidth = bandwidthCounter.NextValue();

   var dataSentCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", networkCard);
   var dataReceivedCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", networkCard);

   float sendSum = 0;
   float receiveSum = 0;

   for (var index = 0; index < numberOfIterations; index++)
   {
      sendSum += dataSentCounter.NextValue();
      receiveSum += dataReceivedCounter.NextValue();
   }

   var dataSent = sendSum;
   var dataReceived = receiveSum;

   double utilization = (8 * (dataSent + dataReceived)) / (bandwidth * numberOfIterations) * 100;

   return utilization;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31957943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档