计算带宽(已发送字节和接收字节始终返回0)

时间:2015-08-19 10:47:53

标签: c# c#-4.0 c#-3.0 c#-2.0

我读了这个article,我希望得到所有进程的发送字节和接收字节,但是所有进程的发送字节和接收字节总是返回0; 这是我的代码:

namespace Network
{
    public class NetworkTraffic
    {
        private List<PerformanceCounter> listBytesSentPerformanceCounter;
        private List<PerformanceCounter> listBytesReceivedPerformanceCounter;
        //private PerformanceCounter bytesSentPerformanceCounter;
        //private PerformanceCounter bytesReceivedPerformanceCounter;

        public NetworkTraffic()
        {
            listBytesSentPerformanceCounter = new List<PerformanceCounter>();
            listBytesReceivedPerformanceCounter = new List<PerformanceCounter>();
            List<string> listInstanceName = GetInstanceName();

            foreach (string str in listInstanceName)
            {
                PerformanceCounter bytesSentPerformanceCounter = new PerformanceCounter();
                PerformanceCounter bytesReceivedPerformanceCounter = new PerformanceCounter();
                bytesSentPerformanceCounter.CategoryName = ".NET CLR Networking 4.0.0.0";
                bytesSentPerformanceCounter.CounterName = "Bytes Sent";
                bytesSentPerformanceCounter.InstanceName = str;
                bytesSentPerformanceCounter.ReadOnly = false;
                listBytesSentPerformanceCounter.Add(bytesSentPerformanceCounter);

                bytesReceivedPerformanceCounter.CategoryName = ".NET CLR Networking 4.0.0.0";
                bytesReceivedPerformanceCounter.CounterName = "Bytes Received";
                bytesReceivedPerformanceCounter.InstanceName = str;
                bytesReceivedPerformanceCounter.ReadOnly = false;
                listBytesReceivedPerformanceCounter.Add(bytesReceivedPerformanceCounter);
            }
        }

        //public float GetBytesSent()
        //{
        //    float bytesSent = bytesSentPerformanceCounter.RawValue;

        //    return bytesSent;
        //}

        //public float GetBytesReceived()
        //{
        //    float bytesReceived = bytesReceivedPerformanceCounter.RawValue;

        //    return bytesReceived;
        //}

        private static List<string> GetInstanceName()
        {
            // Used Reflector to find the correct formatting:
            string assemblyName = GetAssemblyName();
            if ((assemblyName == null) || (assemblyName.Length == 0))
            {
                assemblyName = AppDomain.CurrentDomain.FriendlyName;
            }
            StringBuilder builder = new StringBuilder(assemblyName);
            for (int i = 0; i < builder.Length; i++)
            {
                switch (builder[i])
                {
                    case '/':
                    case '\\':
                    case '#':
                        builder[i] = '_';
                        break;
                    case '(':
                        builder[i] = '[';
                        break;

                    case ')':
                        builder[i] = ']';
                        break;
                }
            }

            List<string> listInstanceName = new List<string>();
            Process[] listProcess = Process.GetProcesses();
            string InstanceName;
            foreach (Process pro in listProcess)
            {
                InstanceName = string.Format(CultureInfo.CurrentCulture,
                                     "{0}[{1}]",
                                     builder.ToString(),
                                     pro.Id);
                listInstanceName.Add(InstanceName);
            }
            return listInstanceName;
        }
        private static string GetAssemblyName()
        {
            string str = null;
            Assembly entryAssembly = Assembly.GetEntryAssembly();
            if (entryAssembly != null)
            {
                AssemblyName name = entryAssembly.GetName();
                if (name != null)
                {
                    str = name.Name;
                }
            }
            return str;
        }


        public static void Main()
        {
            NetworkTraffic networkTraffic = new NetworkTraffic();

            try
            {
                while (true)
                {
                    WebRequest webRequest = WebRequest.Create("http://www.google.com");
                    webRequest.Method = "GET";

                    using (WebResponse response = webRequest.GetResponse())
                    using (Stream responseStream = response.GetResponseStream())
                    using (StreamReader reader = new StreamReader(responseStream))
                    {
                    }
                    //Console.WriteLine("Bytes sent: {0}", networkTraffic.GetBytesSent());
                    //Console.WriteLine("Bytes received: {0}", networkTraffic.GetBytesReceived());
                    foreach (PerformanceCounter send in networkTraffic.listBytesSentPerformanceCounter)
                    {
                        Console.WriteLine("Instance name: " + send.InstanceName + " Sent: " + send.RawValue);
                    }
                    Thread.Sleep(1000);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            Console.ReadLine();
        }
    }
}

任何人都可以帮我解决这个问题。

0 个答案:

没有答案