如何监控特定应用程序的网络带宽使用情况?

我正在尝试学习如何监视特定应用程序的网络带宽使用情况。 我正在看IPv4InterfaceStatistics ,但这似乎监控了NIC卡的性能。
我想监视一个特定的应用程序,看看每秒消耗多少带宽。
有谁知道如何做到这一点的例子?

 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; } } } 

如果您熟悉OSI模型http://en.wikipedia.org/wiki/OSI_model,您会看到您尝试与第3层进行交互,您应该在第3层与第7层进行交互。

我与你正在使用的类的连接能够测量发送的字节,特别是如果你传输单个字节,(这是因为我不知道你的代码是怎么看的),你应该能够计算出数量一段时间内的字节数除以秒数,你将得到你的结果。