2014-12-10 2 views
3

Я пытаюсь узнать, как контролировать использование пропускной способности сети конкретного приложения. Я смотрю IPv4InterfaceStatistics, но это, похоже, контролирует производительность карты NIC.
Я хотел бы отслеживать конкретное приложение, чтобы узнать, сколько полос пропускания потребляется каждую секунду.
Кто-нибудь знает пример того, как это можно сделать?Как отслеживать использование пропускной способности сети конкретного приложения?

+0

Монитор ресурсов для Windows. –

+0

@DeepakMishra Я хочу, чтобы он решил это программно, поскольку это C# и стек, а не serverfault, но я могу ошибаться. –

+0

Да Я хочу разрешить это программно –

ответ

3
using System; 
using System.Diagnostics; 
using System.Globalization; 
using System.IO; 
using System.Net; 
using System.Net.Sockets; 
using System.Reflection; 
using System.Text; 
using System.Threading; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      while (true) 
      { 
       var bytesSentPerformanceCounter = new PerformanceCounter(); 
       bytesSentPerformanceCounter.CategoryName = ".NET CLR Networking"; 
       bytesSentPerformanceCounter.CounterName = "Bytes Sent"; 
       bytesSentPerformanceCounter.InstanceName = GetInstanceName(); 
       bytesSentPerformanceCounter.ReadOnly = true; 

       var bytesReceivedPerformanceCounter = new PerformanceCounter(); 
       bytesReceivedPerformanceCounter.CategoryName = ".NET CLR Networking"; 
       bytesReceivedPerformanceCounter.CounterName = "Bytes Received"; 
       bytesReceivedPerformanceCounter.InstanceName = GetInstanceName(); 
       bytesReceivedPerformanceCounter.ReadOnly = true; 

       Console.WriteLine("Bytes sent: {0}", bytesSentPerformanceCounter.RawValue); 
       Console.WriteLine("Bytes received: {0}", bytesReceivedPerformanceCounter.RawValue); 
       Thread.Sleep(1000); 
      } 
     } 

     private static string GetInstanceName() 
     { 
      string returnvalue = "not found"; 
      //Checks bandwidth usage for CUPC.exe..Change it with your application Name 
      string applicationName = "CUPC"; 
       PerformanceCounterCategory[] Array = PerformanceCounterCategory.GetCategories(); 
      for (int i = 0; i < Array.Length; i++) 
      { 
       if (Array[i].CategoryName.Contains(".NET CLR Networking")) 
        foreach (var item in Array[i].GetInstanceNames()) 
        { 
         if (item.ToLower().Contains(applicationName.ToString().ToLower())) 
          returnvalue = item; 

        } 

      } 
      return returnvalue; 
     } 
    } 
} 
-1

Если вы знакомы с моделью OSI http://en.wikipedia.org/wiki/OSI_model вы видите, что вы пытаетесь взаимодействовать со слоем 3, где вы должны взаимодействовать со слоем 7.

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

Смежные вопросы