2010-01-21 14 views
1

我需要計算每臺正在運行的程序/進程通過我的PC發送和接收的數據量(單位爲B/kB/MB /任意)。如何統計我的電腦(所有進程/程序)發送或接收的數據?

比方說,我點擊「開始計算」,我得到我的瀏覽器,FTP客戶端,系統actualizations等等,等等,從那時刻接收發送一切的總和/直到我選擇「停止」。

爲了簡單起見,我想統計僅通過TCP傳輸的數據 - 如果它很重要。

現在,我得到了PC中NIC的組合列表(基於下面鏈接中的註釋)。 我試着改變給定的代碼here,但是我失敗了,在dataSent/dataReceived中出現了無用的值。

我也在442409這個問題上看過答案,但是我可以看到它是關於同一個程序發送/接收的數據,這不符合我的要求。

回答

2

Perfmon應該有這種類型的東西,你想要做的計數器,所以先看看那裏。

+0

對不起,我搜索了很多例子,但我沒有設法使用perfmon製作UL/DL計數器。如果你有一些示例代碼,我將不勝感激... – WRonX 2010-01-22 13:26:02

+0

這些計數器是每個網絡適配器: 網絡接口|收到的字節數/秒 網絡接口|發送的字節數/秒 但是,這些只會給出當前給定時間點的速率,因此您必須隨着時間自行完成總和。 對於您的無處不在的值,請查看Perfmon GUI是否顯示相同的值,也許您可​​以忽略該特定接口。 – 2010-01-22 14:17:57

0

好吧,我想我已經找到了解決辦法,但也許有人會提出更好的東西...

我所做的定時器(10毫秒與測試區間的話),其獲取「接收的字節/秒」 PerformanceCounter值並將其添加到全局「臨時」變量中,並且還會增加總計數器(如果存在任何滯後)。然後我做了第二個定時器,間隔爲1s,得到數值的總和(來自臨時總和),將其除以計數器並加到總量(也是全局的)上。然後它重置臨時金額和櫃檯。

我只是不知道這是否是正確的方法,因爲我不知道,怎樣的「接收的字節數/秒」變量的PerformanceCounter是在一秒鐘內改變。也許我應該製作某種直方圖並獲得平均值?

現在,下載8.6MB的文件給我9.2MB總量 - 是有可能的其他進程將產生在不到20秒的淨活性的量?

+1

如果您下載8.6 MB的文件,您將知道數據本身的大小(OSI第7層),但是需要額外的頭文件數據才能通過線路獲取文件(OSI第1-6層)。所以總量可能來自這些較低的水平。 – Oliver 2010-01-26 13:56:14

+0

呃...有些東西我不明白。圖表在這裏:http://img251.imageshack.us/i/graphu.png/(我沒有統計0值)。綠線是0Bps,藍線是第二標記。正如你所看到的,有一個最常見的值(大約是2800Bps,正如我所見)。當淨流量似乎降低時,它總是會振盪那個價值。爲什麼? 也許我應該計數0值同樣重要,所以我會計算平均值,如(100,0,0,200,0)/ 6? – WRonX 2010-01-26 15:00:11

相關問題