none
PerformanceCounter не предоставляет скорость инета RRS feed

  • Общие обсуждения

  • Здравствуйте!

    Я пишу приложение, для учета сетевого трафика. И, разумеется, мне понадобилось как-то узнать текущую скорость

    сетевого соединения. Решил использовать компонент PerformanceCounter. Код написал, все вроде правильно, но скорость

    не показывает.  Датаграммы, например, отображаются. Даже процент загрузки ЦП -  и тот работает.

    Вот код:

    private void Init_Count()
      {
    
       for (int i = 0; i < cat.GetInstanceNames().Length; i++)
        {
         Change_Net_Interf.Items.Add(cat.GetInstanceNames()[i]);//добавление списка сетевых интерфейсов в ComboBox.
    
    
         textBox1.Text += cat.GetInstanceNames()[i] + "\r\n======================";//для того, чтобы увидеть список всех доступных интерфейсов
    
    
         str = cat.GetInstanceNames()[i];
        }
    }
    
    
    
    
     private void Change_Net_Interf_SelectedIndexChanged(object sender, EventArgs e)
      {
       performanceCounter1.InstanceName = str;
       
      }
     private void timer2_Tick(object sender, EventArgs e)
      {
       float IncomVal = performanceCounter1.NextValue();
       IncLabel.Text = "Входящая: " + IncomVal.ToString() + " Byte/s";
       
      }
    
    
    

     В свойствах PerformanceCounters, CategoryName="Сетевой Интерфейс", CounterName="Получено байт/с", InstanceName=По-

    молчанию первый пункт, но выбирается в ComboBox'е.

    Почитал разные форумы, оказалось, не у меня одного такая проблема, но ее решения я нигде не видел.

    Разумеется, я перепробовал все доступные через, метод GetInstanceNames(), сетевые интерфейсы.

    Подскажите, пожалуйста, как сделать так, чтобы performanceCounter работал корректно? Или нужно выбрать другой

    счетчик?

    P.S.

    Я начинающий программер :D, поэтому не хотелось бы иметь дело с iphlpapi.dll. :) 


    И таки, что бы вы подумали? Снизошло... (c)Bondor
    • Изменено Kerchik 21 ноября 2010 г. 16:48 комментарии в коде криво скопипастились.
    • Изменен тип Abolmasov Dmitry 26 ноября 2010 г. 14:19
    21 ноября 2010 г. 16:45

Все ответы

  •   public Form1()
      {
       InitializeComponent();
    
       // Добавление сетевых интерфейсов в combobox
       PerformanceCounterCategory cat = new PerformanceCounterCategory();
       cat.CategoryName = "Network Interface";
       comboBox1.DataSource = cat.GetInstanceNames();
      }
    
      PerformanceCounter pc = new PerformanceCounter("Network Interface", "Bytes Received/sec");
      private void button1_Click(object sender, EventArgs e)
      {
       // таймер
       Timer t = new Timer();
       t.Interval = 100;
       t.Tick += new EventHandler(t_Tick);
       t.Start();
      }
    
      void t_Tick(object sender, EventArgs e)
      {
       // вывод информации
       richTextBox1.AppendText(pc.NextValue() + Environment.NewLine);
      }
    
      private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
      {
       // изменение сетевого интерфейса
       pc.InstanceName = comboBox1.SelectedItem.ToString();
      }
    

     

    Также можете посмотреть Monitoring network speed


    Для связи [mail]
    21 ноября 2010 г. 22:31
  • Также можете посмотреть Monitoring network speed

    Для связи [mail]

    Да, я уже пробовал этот способ, но программа, которая в комплекте с DLL тоже не показывает скорость.

    И ваш код, также не работает. Просто нули, и там и там.

    И да, интернет у меня через 3G модем, может поэтому ничего нет?

    Вот список интерфейсов, которые я получил через метод NetworkInterface.GetAllNetwrokInterfaces():
    Имя: MegaFon Internet
    ID: {EE49B9D5-3549-4E4A-937A-738BCB6040A9}
    Тип: Ppp
    Состояние: Up
     =================================
    Имя: Беспроводное сетевое соединение
    ID: {FE3481D4-1BBC-41C4-BC95-5C8D05F5D88B}
    Тип: Wireless80211
    Состояние: Down
     =================================
    Имя: Подключение по локальной сети
    ID: {B8C0EDA4-B28E-4A55-95D9-CCD33FACE654}
    Тип: Ethernet
    Состояние: Down
     =================================
    Имя: Loopback Pseudo-Interface 1
    ID: {E29AC6C2-7037-11DE-816D-806E6F6E6963}
    Тип: Loopback
    Состояние: Up
     =================================
    Имя: isatap.{FE3481D4-1BBC-41C4-BC95-5C8D05F5D88B}
    ID: {4F94B9BE-8F51-4FF8-B548-4174BFD8B89A}
    Тип: Tunnel
    Состояние: Down
     =================================
    Имя: Подключение по локальной сети* 10
    ID: {DCC39257-F551-4DE9-9FFC-60E0E070CF94}
    Тип: Tunnel
    Состояние: Up
     =================================
    Имя: isatap.{B8C0EDA4-B28E-4A55-95D9-CCD33FACE654}
    ID: {AFF24566-AFEC-4EAC-B171-9FCA1D12130A}
    Тип: Tunnel
    Состояние: Down
     =================================
    Имя: isatap.{EE49B9D5-3549-4E4A-937A-738BCB6040A9}
    ID: {42226A63-DE44-42CE-B5EE-2B52E477B288}
    Тип: Tunnel
    Состояние: Down
     =================================
    Имя: 6TO4 Adapter
    ID: {5AE39893-8281-4AF8-BE4D-577DB2518C4B}
    Тип: Tunnel
    Состояние: Down
     

    А вот, что я получил через метод  cat.GetInstanceNames()
    isatap.{EE49B9D5-3549-4E4A-937A-738BCB6040A9}
    ======================
    6TO4 Adapter
    ======================
    Intel[R] PRO_Wireless 3945ABG Network Connection
    ======================
    isatap.{B8C0EDA4-B28E-4A55-95D9-CCD33FACE654}
    ======================
    Подключение по локальной сети* 10
    ======================
    Realtek RTL8139_810x Family Fast Ethernet сетевой адаптер
    ======================
    isatap.{FE3481D4-1BBC-41C4-BC95-5C8D05F5D88B}
    ======================

    Я вообще ничего не понимаю. Ладно, последний метод показывает только реальные интерфейсы, которые, кхм, связаны с реальными устройствами. Но почему у одних, только ID, а у других нормальное название?! Может, поэтому и не работает.


    И таки, что бы вы подумали? Снизошло... (c)Bondor
    22 ноября 2010 г. 7:40
  • А в приведенной выше программе с codeproject Вы все интерфейсы пробовали? Если да - то скорее всего дело действительно в 3G  модеме.
    Для связи [mail]
    24 ноября 2010 г. 6:58
  • А в приведенной выше программе с codeproject Вы все интерфейсы пробовали? Если да - то скорее всего дело действительно в 3G  модеме.
    Для связи [mail]

    Да, я пробовал все интерфейсы. Причем, даже "Системный Монитор" не показывает скорость. НО когда я включил ethernet-соединение, скорость соединения показывала и программа с codeproject и "Системный монитор" и моя программа. :) И кстати, свое творение я давал двоим знакомым, которые выходят в интернет далеко не через 3G модем и у них тоже ничего не работало. А кроме performancecounter и IP Helper API больше никаких средств, для получения текущей скорости, нет? Я так понимаю, что чтобы наверняка у всех работало, лучше воспользоваться iphlpapi.dll?
    И таки, что бы вы подумали? Снизошло... (c)Bondor
    25 ноября 2010 г. 11:33
  • Раз даже в в Сиситемном мониторе не показывает активность,то не факт, что через iphlpapi.dll будет работать. Но в любом случае стоит попробовать использовать iphlpapi.dll.

    Тему предлагаю перевести в обсуждение, а если возникнут вопросы по iphlpapi.dll - создадите новую.


    Для связи [mail]
    26 ноября 2010 г. 7:41
  • Ну тогда мне интересно, есть стандартная программа от мегафона, есть программа MDMA(не, совсем не то, что можно подумать :D), есть, в конце концов, Du Meter, и все они исправно показывают скорость. Я думаю, что в них используется именно iphlpapi.dll. Осталось только в нем разобраться.. %) А тему, да, можно перенести.
    И таки, что бы вы подумали? Снизошло... (c)Bondor
    26 ноября 2010 г. 12:21
  • Попробуйте скачать и проверить данную программу - http://dandar3.blogspot.com/2009/03/network-monitor-v07.html . И у знакомых попробуйте, она написана с использованием библиотеки iphlpapi.dll. Если будет работать - то это то что вам нужно, там есть исходники и вы сможете переделать ее под свои нужны.

    Для связи [mail]
    26 ноября 2010 г. 14:19
  • Скачал я ее. У знакомого работает, а у меня - нет. :( Всё дело в том, что в combobox'e, где необходимо выбрать адаптер нет ничего. Пусто. И разумеется, подключив телефон и установив ethernet-соединение - адаптер появился и все завертелось. Видимо, есть еще какая-то возможность получать скрость текущего соединения. Ах да, вот снимки: http://ipicture.ru/uploads/20101128/BtkPXVKh.jpg http://ipicture.ru/uploads/20101128/QiN1Sh25.jpg Системный монитор, как видно, ничего не показывет. А вот монитор ресурсов еще как! Причем, все настолько подробно, что челюсть отвисает. :D Вот бы как-то этo все заполучить.
    И таки, что бы вы подумали? Снизошло... (c)Bondor
    28 ноября 2010 г. 6:44