Я пытаюсь узнать, как контролировать использование пропускной способности сети конкретного приложения. Я смотрю IPv4InterfaceStatistics
, но это, похоже, контролирует производительность карты NIC.
Я хотел бы отслеживать конкретное приложение, чтобы узнать, сколько полос пропускания потребляется каждую секунду.
Кто-нибудь знает пример того, как это можно сделать?Как отслеживать использование пропускной способности сети конкретного приложения?
3
A
ответ
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.
Я ваше соединение с какой-либо класс, который вы используете вы можете измерять байты, особенно если вы перевозите отдельные байты (это потому, что я понятия не имею, как выглядит ваш код), вы должны иметь возможность рассчитать количество байтов в течение промежутка времени с количеством секунд, и вы будете иметь ваш результат.
Монитор ресурсов для Windows. –
@DeepakMishra Я хочу, чтобы он решил это программно, поскольку это C# и стек, а не serverfault, но я могу ошибаться. –
Да Я хочу разрешить это программно –