【问题标题】:How to count the data sent or received by my PC (all processes/programs)?如何计算我的 PC 发送或接收的数据(所有进程/程序)?
【发布时间】:2010-01-21 15:25:11
【问题描述】:

我需要按每个正在运行的程序/进程计算我的 PC 发送和接收的数据量(以 B/kB/MB/为单位)。

假设我点击“开始计数”,然后从那一刻到我选择“停止”,我得到了浏览器、FTP 客户端、系统实现等发送/接收的所有内容的总和。

为了简单起见,我只想计算通过 TCP 传输的数据 - 如果重要的话。

现在,我得到了 PC 中 NIC 的组合列表(基于下面链接中的评论)。 我试图更改给定here 的代码,但我失败了,在 dataSent/dataReceived 中得到了奇怪的突然出现的值。

我还阅读了442409 问题的答案,但我可以看到它是关于同一程序发送/接收的数据,这不符合我的要求。

【问题讨论】:

    标签: c# counter


    【解决方案1】:

    Perfmon 应该为你想做的这类事情提供计数器,所以先看看那里。

    【讨论】:

    • 对不起,我用谷歌搜索了很多例子,但我没有设法用 perfmon 制作 UL/DL 计数器。如果您有一些示例代码,我将不胜感激...
    • 这些计数器是每个网络适配器的:网络接口 |接收的字节数/秒网络接口 | Bytes Sent/sec 但是这些只为您提供给定时间点的当前速率,因此您必须随着时间的推移自己进行求和。对于你不知从何而来的值,看看 Perfmon GUI 是否显示相同的值,也许你可以忽略那个特定的界面。
    【解决方案2】:

    好吧,我想我已经找到了解决方案,但也许有人会提出更好的建议……

    我制作了计时器(以 10 毫秒的间隔对其进行了测试),它获取“接收的字节数/秒”PerformanceCounter 值并将其添加到全局“临时”变量中,并增加总和计数器(如果有任何滞后)。然后我制作了第二个间隔为 1 秒的计时器,它获取值的总和(来自临时总和),将其除以计数器并添加到总量(也是全局的)。然后它重置临时总和和计数器。

    我只是不确定它是否是正确的方法,因为我不知道“Bytes Received/sec”PerformanceCounter 的变量在一秒钟内如何变化。也许我应该制作某种直方图并获得平均值?

    目前,下载 8.6MB 的文件给了我 9.2MB 的总量 - 其他进程是否有可能在不到 20 秒的时间内产生这么多的净活动?

    【讨论】:

    • 如果您下载一个 8.6 MB 的文件,您就知道数据本身的大小(OSI 第 7 层),但需要额外的标头数据才能让您的文件通过线路(OSI 第 1-6 层) )。所以总量可能来自这些较低的水平。
    • 嗯...有些东西我不明白。图表在这里:img251.imageshack.us/i/graphu.png(我没有计算 0 值)。绿线是 0Bps,蓝线是第二个标记。如您所见,有一个值是最常见的(如我所见,它约为 2800Bps)。当净流量似乎较低时,它总是在该值附近振荡。为什么?也许我应该将 0 值视为同样重要,所以我会计算 te 平均值,例如 (100, 0, 0, 0, 200, 0)/6 ?
    猜你喜欢
    • 2012-12-09
    • 2021-10-10
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多