Как узнать пропускную способность сети, используемой в данный момент? - PullRequest
10 голосов
/ 28 декабря 2011

Я пытаюсь построить балансировщик нагрузки для программы, которая работает на 2 разных серверах.

Пока что мой балансировщик нагрузки проверяет только загрузку ЦП каждого сервера, используя экземпляр PerformanceCounter в каждой серверной программе.

Я также хотел бы проверить использование полосы пропускания каждого сервера, как я могу это проверить?

(вероятно, это также делается с использованием PerformanceCounter, но я не знаком с его использованием)

1 Ответ

21 голосов
/ 29 декабря 2011

Благодаря лунному свету я нашел это http://www.keyvan.ms/how-to-calculate-network-utilization-in-net

public double getNetworkUtilization(string networkCard){

            const int numberOfIterations = 10;

            PerformanceCounter bandwidthCounter = new PerformanceCounter("Network Interface", "Current Bandwidth", networkCard);
            float bandwidth = bandwidthCounter.NextValue();//valor fixo 10Mb/100Mn/

            PerformanceCounter dataSentCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", networkCard);

            PerformanceCounter dataReceivedCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", networkCard);

            float sendSum = 0;
            float receiveSum = 0;

            for (int index = 0; index < numberOfIterations; index++)
            {
                sendSum += dataSentCounter.NextValue();
                receiveSum += dataReceivedCounter.NextValue();
            }
            float dataSent = sendSum;
            float dataReceived = receiveSum;


            double utilization = (8 * (dataSent + dataReceived)) / (bandwidth * numberOfIterations) * 100;
            return utilization;
        }

, чтобы найти доступные сетевые карты, этот код помог мне:

public void printNetworkCards()
        {
            PerformanceCounterCategory category = new PerformanceCounterCategory("Network Interface");
            String[] instancename = category.GetInstanceNames();

            foreach (string name in instancename)
            {
                Console.WriteLine(name);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...