Расчет полосы пропускания

Есть ли способ вычислить пропускную способность (пакеты, отправленные и полученные) exe/application через сеть? перешли в IPGlobalProperties,

и другие классы.... Я хочу, чтобы пакеты, отправленные n, были получены одним приложением. я проверил http://netstatagent.com/ Мне нужно что-то подобное... есть что-нибудь в .net, которое может мне помочь?

Мое приложение подключается к веб-службе для отправки некоторых файлов изображений... а также принимает файлы...

Ответы

Ответ 1

Один из способов - получить значение счетчиков производительности "NET CLR Networking/Bytes Received" и ".NET CLR Networking/Bytes Sent" для вашего приложения:

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" не существует в указанной категории) и что вам нужно вставить

<configuration>
  <system.net>
    <settings>
      <performanceCounters enabled="true" />
    </settings>
  </system.net>
</configuration>

в вашем app.config.

Для полной загрузки образца NetworkTraffic.cs и NetworkTraffic. exe.config.

Ответ 2

Я вспомнил, что прочитал статью об этом и выкопал ее для вас, http://nayyeri.net/blog/how-to-calculate-network-utilization-in-net/

выдержку перед их кодом:

.NET имеет три производительности счетчики для использованных параметров в использования сети из коробка. Все эти счетчики расположены в категории Сетевой интерфейс и "Bytes Sent/sec" , "Bytes Sent/sec" , "Bytes Sent/sec" Received/sec "и" Current Bandwidth ". Единственный параметр, который требует дополнительные усилия для расчета time_in_sec.

"Bytes Sent/sec" и "Bytes Полученные/сек "счетчики вычисляют их значения, основанные на разных выборках и лучший способ получить лучшую ценность из этих счетчиков суммирование их значений в цикле потому что в некоторых случаях их значения могут быть нулевым или сильно отличаться от реальное состояние сети. Тогда мы можем найдите параметр time_in_sec нахождение количества раз, когда цикл повторяется, потому что счетчики производительности находят свои значения в течение одной секунды общее время в секунд равно числу итераций.

Ответ 3

im lookin для байтов/сек для каждого приложения... не для всего компьютера.... Кажется, что он не работает для консольного приложения... Сообщение об ошибке: "консольное приложение не существует в указанной категории".

Ответ 4

Это не работает... насколько я знаю bytesSentPerformanceCounter.InstanceName = ""//здесь вам нужно указать имя сетевой карты...

Ответ 5

каким-то образом отправленные байты слишком малы, чем полученные байты... это не то, что я просматриваю сеть из своего приложения... Я отправляю изображения веб-службы (как байты) и другие файлы XML (несколько kbs как ввод строки к функции веб-сервиса). В свою очередь я иногда возвращаю коды ошибок или bool... все же отправленные байты слишком малы, чем полученные... полученные в 5 раз больше... я m puzzled...