2011-12-28 9 views
8

Tôi đang cố gắng tạo bộ cân bằng tải cho một chương trình đang chạy trên 2 máy chủ khác nhau.Làm thế nào để biết băng thông mạng được sử dụng tại một thời điểm nhất định?

Cho đến nay trình cân bằng tải của tôi, chỉ kiểm tra việc sử dụng CPU của từng máy chủ bằng cách sử dụng một thể hiện của PerformanceCounter trong mỗi chương trình máy chủ.

Tôi cũng muốn kiểm tra mức sử dụng băng thông của mỗi máy chủ, làm cách nào tôi có thể kiểm tra điều đó?

(nó có lẽ là thực hiện cũng sử dụng PerformanceCounter nhưng tôi không quen với việc sử dụng của nó)

+2

hãy nhìn vào câu hỏi này: http://stackoverflow.com/questions/442409/c-bandwidth – Moonlight

Trả lời

17

Nhờ ánh trăng tôi đã tìm thấy này 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; 
     } 

để tìm card mạng có sẵn mã này giúp tôi:

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

      foreach (string name in instancename) 
      { 
       Console.WriteLine(name); 
      } 
     }