Расчет пропускной способности

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

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

Есть ли что-нибудь в .Net, что может мне помочь?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
17
0
14 942
5

Ответы 5

Один из способов - получить значение счетчики производительности «.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.

Этот код больше не работает и каждый раз выдает ошибку nvalidOperation : Instance 'XXX' does not exist in the specified Category.

TheGateKeeper 17.04.2012 16:20

Я использую windows 7 и .net 4.0

TheGateKeeper 17.04.2012 16:20

«Обратите внимание, что счетчики производительности не создаются до первого использования соответствующих сетевых библиотек», это должно быть выделено жирным шрифтом :). Я потратил много времени, пытаясь понять, что не так, потому что в других решениях это не упоминалось.

Wojciech Kulik 29.11.2015 21:21

Я ищу байты / сек для каждого приложения ... не для всего компьютера .... Кажется, не работает для консольного приложения ... Сообщение об ошибке: «Консольное приложение не существует в указанной категории».

Существуют экземпляры счетчиков производительности для каждого процесса. Вы используете свойство InstanceName, чтобы выбрать, какой из них вы хотите. (PS. Вы должны добавить комментарий, а не ответ на что-то вроде этого).

Rasmus Faber 14.01.2009 13:23

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

InstanceName - это имя экземпляра PerformanceCounter. CLR форматирует его точно так же, как в коде, который я написал, в основном «ApplicationName [ProcessId]». Попробуйте скачать код, который я прикрепил к исходному сообщению. У меня он отлично работает (Vista 32 бит, .Net 2.0).

Rasmus Faber 15.01.2009 14:06

Привет, Расмус, Спасибо за ваш код ... он работает отлично ... Однако отправленные и полученные байты всегда равны 0 ... Я должен сказать, что вы, безусловно, очень хорошо осведомлены в этой области .net ... Я не могу добавить комментарий как "для комментирования требуется 50 репутации"

Fredd 19.01.2009 08:47

Расмус, мне интересно, не могли бы вы указать мне на хороший ресурс по счетчикам производительности ... может быть, книгу ...

Fredd 19.01.2009 12:08

Простите. Я не могу придумать никаких хороших ресурсов. Может быть, вам стоит задать это как отдельный вопрос?

Rasmus Faber 22.01.2009 00:17

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

Попробуйте использовать WireShark для просмотра фактически отправленных и полученных данных. И еще раз проверьте, что вы не переключили полученный и отправленный. Вы также можете попробовать проверить счетчики производительности с помощью монитора производительности.

Rasmus Faber 22.01.2009 00:16

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

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

.NET comes with three performance counters for the used parameters in network utilization formula out of the box. All of these counters are located in Network Interface category and are named "Bytes Sent/sec", "Bytes Received/sec" and "Current Bandwidth". The only parameter that requires some extra effort to be calculated is time_in_sec.

"Bytes Sent/sec" and "Bytes Received/sec" counters calculate their values based on different samples and the best way to get a better value from these counters is finding the summation of their values in a loop because in some cases their values may be zero or very different from the real state of the network. Then we can find the time_in_sec parameter by finding the number of times that the loop is iterated because our performance counters find their values for one seconds the overall time in seconds is equal to the number of iterations.

Другие вопросы по теме