Вычисление пропускной способности

Есть ли какой-либо способ, которым я могу вычислить пропускную способность (пакеты, отправленные и полученные) exe/application через сеть? изучили IPGlobalProperties и другие классы.

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

Есть ли что-нибудь в .NET, который может помочь мне?

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

17
задан 5377037 17 September 2019 в 09:30
поделиться

5 ответов

Один путь состоит в том, чтобы получить значение эти счетчики производительности "Сети/Байты CLR.NET Полученные" и "Сети/Байты CLR.NET, Отправленные" за Вашим приложением:

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.

22
ответ дан 30 November 2019 в 13:05
поделиться

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

выборка перед их кодом:

.NET идет с тремя счетчиками производительности для используемых параметров в формуле использования сети из поля. Всех этих счетчиков располагают в категории Сетевого интерфейса и называют "Байтами, Отправленной/секундой", "Байты Полученная/секунда" и "Текущая Пропускная способность". Единственный параметр, который требует, чтобы некоторое дополнительное усилие было вычислено, является time_in_sec.

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

4
ответ дан 30 November 2019 в 13:05
поделиться

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

0
ответ дан 30 November 2019 в 13:05
поделиться

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

0
ответ дан 30 November 2019 в 13:05
поделиться

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

0
ответ дан 30 November 2019 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: