我正在尝试学习如何监控特定应用程序的网络带宽使用情况。我正在查看IPv4InterfaceStatistics
,但这似乎可以监控NIC卡的性能
我想监视一个特定的应用程序,看看每秒消耗多少带宽
有谁知道如何做到这一点的例子?
答案 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 :(得分:0)
这是使用 PerformanceCounter 的修改版本:
var processFileName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
var bytesReceivedPerformanceCounter = new PerformanceCounter();
bytesReceivedPerformanceCounter.CategoryName = ".NET CLR Networking 4.0.0.0";
bytesReceivedPerformanceCounter.CounterName = "Bytes Received";
bytesReceivedPerformanceCounter.InstanceName = VersioningHelper.MakeVersionSafeName(processFileName, ResourceScope.Machine, ResourceScope.AppDomain);
bytesReceivedPerformanceCounter.ReadOnly = true;
Console.WriteLine("Bytes received: {0}", bytesReceivedPerformanceCounter.RawValue);
答案 2 :(得分:-2)
如果您熟悉OSI模型http://en.wikipedia.org/wiki/OSI_model,您会发现您尝试与第3层进行交互,您应与第7层进行交互。
我与你正在使用的类的连接能够测量发送的字节,特别是如果你传输单个字节,(这是因为我不知道你的代码是怎么看的),你应该能够计算一个时间除以秒数的字节数,你将得到你的结果。