2010-06-25 44 views
1

我想計算在特定時間間隔內下載和上傳的總數據量,並將其存儲到數據庫中以便稍後查看。因此,這個特定的用戶此時登錄並下載並上傳了這麼多的數據。計算數據傳輸下載+上傳數據

我想在C#中做到這一點。

回答

0

您可以使用System.Diagnostics命名空間中的PerformanceCounter類來完成此操作。

記下兩個班,這將幫助您實現您想要做的事情。

NetworkMonitor

public class NetworkMonitor 
{ 
    private ArrayList adapters; 
    public ArrayList monitoredAdapters; 

    public NetworkMonitor() 
    { 
     this.adapters = new ArrayList(); 
     this.monitoredAdapters = new ArrayList(); 
     EnumerateNetworkAdapters(); 
    } 

    private void EnumerateNetworkAdapters() 
    { 
     PerformanceCounterCategory category = new PerformanceCounterCategory("Network Interface"); 

     foreach (string name in category.GetInstanceNames()) 
     { 
      if (name == "MS TCP Loopback interface") 
       continue; 
      NetworkAdapter adapter = new NetworkAdapter(name); 
      adapter.dlCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", name); 
      adapter.ulCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", name); 
      this.adapters.Add(adapter); 
      adapter.init(); 
     } 
    } 

    public NetworkAdapter[] Adapters 
    { 
     get 
     { 
      return (NetworkAdapter[])this.adapters.ToArray(typeof(NetworkAdapter)); 
     } 
    } 
} 

NetworkAdapter

public class NetworkAdapter 
{ 
    // Instances of this class are supposed to be created only in an NetworkMonitor. 
    internal NetworkAdapter(string name) 
    { 
     this.name = name; 
    } 

    private long dlSpeed, ulSpeed; 
    private long dlValue, ulValue; 
    private long dlValueOld, ulValueOld; 

    internal string name; 
    internal PerformanceCounter dlCounter, ulCounter; 
    internal bool Enabled; 

    internal void init() 
    { 
     this.dlValueOld = this.dlCounter.NextSample().RawValue; 
     this.ulValueOld = this.ulCounter.NextSample().RawValue; 
     this.Enabled = true; 
    } 

    // Obtain new sample from performance counters, and refresh the values saved in dlSpeed, ulSpeed, etc. 
    // This method is supposed to be called only in NetworkMonitor, one time every second. 
    internal void refresh() 
    { 
     this.dlValue = this.dlCounter.NextSample().RawValue; 
     this.ulValue = this.ulCounter.NextSample().RawValue; 

     // Calculates download and upload speed. 
     this.dlSpeed = this.dlValue - this.dlValueOld; 
     this.ulSpeed = this.ulValue - this.ulValueOld; 
     this.dlValueOld = this.dlValue; 
     this.ulValueOld = this.ulValue; 
    } 

    // Overrides method to return the name of the adapter. 
    public override string ToString() 
    { 
     return this.name; 
    } 

    public string Name 
    { 
     get 
     { 
      return this.name; 
     } 
    } 
    // Current download speed in bytes per second. 
    public long DownloadSpeed(int Interval) 
    { 
     return this.dlSpeed * 1000/Interval; 
    } 
    // Current upload speed in bytes per second. 
    public long UploadSpeed(int Interval) 
    { 
     return this.ulSpeed * 1000/Interval; 
    } 

} 

所有你需要做的是:

long downloadSpeed = 0; 
long uploadSpeed = 0; 
NetworkMonitor networkMonitor = new NetworkMonitor(); 

foreach (NetworkAdapter adapter in monitor.Adapters) 
{ 
    if (adapter.Enabled) 
    { 
     adapter.refresh(); 
     downloadSpeed += adapter.DownloadSpeed(yourTimerInterval); 
     uploadSpeed += adapter.UploadSpeed(yourTimerInterval); 
    } 
} 

希望這有助於。 此致敬禮。

+0

嘿thnks爲您的幫助bt其下載一個複製速度...我希望它..下載的數據量lyk 30 MB或35 MB ..等.. – 2010-06-25 11:27:40

+0

每秒運行一段代碼,並且加起來你想保留的地方。 '有沒有確定的方式來獲得總金額' – 2010-06-25 11:49:36

+0

okkzz.thnkxx很多.. – 2010-06-28 10:11:46