首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算带宽

计算带宽
EN

Stack Overflow用户
提问于 2009-01-14 09:36:39
回答 5查看 15.2K关注 0票数 17

有没有办法通过网络计算exe/应用程序的带宽(发送和接收的数据包)?已经研究了IPGlobalProperties和其他类。

我希望通过单个应用程序发送和接收数据包。我已经检查了http://netstatagent.com/,需要一些类似的东西。

在.Net中有什么可以帮助我的吗?

我的应用程序连接到web服务以发送和接收一些图像文件。

EN

回答 5

Stack Overflow用户

发布于 2009-01-14 09:58:15

一种方法是检索应用程序的performance counters ".NET CLR网络/接收的字节数“和".NET CLR网络/发送的字节数”的值:

代码语言:javascript
复制
PerformanceCounter bytesSentPerformanceCounter= new PerformanceCounter();
bytesSentPerformanceCounter.CategoryName = ".NET CLR Networking";
bytesSentPerformanceCounter.CounterName = "Bytes Sent";
bytesSentPerformanceCounter.InstanceName = GetInstanceName();
bytesSentPerformanceCounter.ReadOnly = true;

float bytesSent = bytesSentPerformanceCounter.NextValue();

//....

private static string GetInstanceName()
{
  // Used Reflector to find the correct formatting:
  string assemblyName = GetAssemblyName();
  if ((assemblyName == null) || (assemblyName.Length == 0))
  {
    assemblyName = AppDomain.CurrentDomain.FriendlyName;
  }
  StringBuilder builder = new StringBuilder(assemblyName);
  for (int i = 0; i < builder.Length; i++)
  {
    switch (builder[i])
    {
      case '/':
      case '\\':
      case '#':
        builder[i] = '_';
        break;
      case '(':
        builder[i] = '[';
        break;

      case ')':
        builder[i] = ']';
        break;
    }
  }
  return string.Format(CultureInfo.CurrentCulture, 
                       "{0}[{1}]", 
                       builder.ToString(), 
                       Process.GetCurrentProcess().Id);
}

private static string GetAssemblyName()
{
  string str = null;
  Assembly entryAssembly = Assembly.GetEntryAssembly();
  if (entryAssembly != null)
  {
    AssemblyName name = entryAssembly.GetName();
    if (name != null)
    {
      str = name.Name;
    }
  }
  return str;
}

请注意,直到您第一次使用相关的网络库时,才会创建性能计数器(您将得到InvalidOperation :实例'XXX‘在指定的类别中不存在),并且您需要插入

代码语言:javascript
复制
<configuration>
  <system.net>
    <settings>
      <performanceCounters enabled="true" />
    </settings>
  </system.net>
</configuration>

在你的app.config里。

要获得完整的示例,请下载NetworkTraffic.csNetworkTraffic.exe.config

票数 22
EN

Stack Overflow用户

发布于 2009-01-21 12:55:52

我记得读过一篇关于这个的文章然后帮你找出来了,http://nayyeri.net/blog/how-to-calculate-network-utilization-in-net/

在他们的代码之前有一个摘录:

.NET为网络利用率公式中的开箱即用参数提供了三个性能计数器。所有这些计数器都位于网络接口类别中,并命名为“发送的字节/秒”、“接收的字节/秒”和“当前带宽”。唯一需要额外计算的参数是time_in_sec。

“发送的字节数/秒”和“接收的字节数/秒”计数器根据不同的样本计算它们的值,从这些计数器获得更好的值的最佳方法是在循环中找到它们的值的总和,因为在某些情况下,它们的值可能为零,或者与网络的实际状态非常不同。然后,我们可以通过查找循环被迭代的次数来找到time_in_sec参数,因为我们的性能计数器在一秒钟内找到它们的值,以秒为单位的总时间等于迭代次数。

票数 4
EN

Stack Overflow用户

发布于 2009-01-14 10:17:34

我正在查找每个应用程序的字节数/秒...不是对整个计算机来说,....Doesnt似乎正在为控制台应用程序工作...错误消息:“控制台应用程序在指定的类别中不存在。”

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

https://stackoverflow.com/questions/442409

复制
相关文章

相似问题

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