C# 网速检测代码的一些问题

最近在学C#,看到一个帖子,有一些疑问
https://blog.csdn.net/weixin_30856965/article/details/97790379?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-2-97790379-blog-82784999.pc_relevant_vip_default&spm=1001.2101.3001.4242.2&utm_relevant_index=5
问题1:第一个红色框框里的 dlCounter与ulCounter应该是一样的吧?就是名字不一样,下面几个量感觉应该也是一样的,为什么运行出来dlSpeed和ulSpeed的值不一样

问题2:第三个红色框框的NextSample().RawValue是什么意思,我看了官网的文档也不是很懂

img

img

不看官方docs(msdn,貌似每次输入msdn都得审核,所以我只能写官方docs文档了,以后童鞋们看我写官方docs,在C#版里代表msdn)
先看英名字

old------------------》旧
Sample------------》采样
NextSample--------------》下一次采样
refresh---------------------》刷新

所以你明白了把,就是以前的数据,刷新(下一次采样),新数据 拉

当然你要开一手资料就是官方的
https://learn.microsoft.com/zh-cn/dotnet/api/system.diagnostics.performancecounter?view=dotnet-plat-ext-6.0

在来说说你给的这个连接的问题
其实把这个连接的代码,意思是那个意思,但是不能用。那两个性能计数器根据代码意思是一个是上行计数,一个是下行计数。
不过这代码你用不了,很明显他不完整。
PerformanceCounter dlCounter, ulCounter
请问,他在哪里new过这个呢?既然没new过自然后面都是null,所以这个代码不完整,你不可以直接用。他差的new的过程,当然有new的过程了,你也不会问这问题了,因为他new的时候就会写,new("某某网卡",“上行计数”),你就知道他不是一个东西了,这个监控的是某个网卡的上行数据量

在来看这个转贴的原始连接

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);

这个new一出来,就很很明显了,他们监控计数的项是不一样的,dl是下行数据也就是Received收到的数据,ul是上行数据 Sent也就是发送的数据

int a=1,b=2
a和b难道不一样都是int型吗,为什么它的值不一样
因为代码里给它赋值不一样呗,为啥类型一样值就得一样啊
你仔细看后面给它赋值用的也不是同一个变量啊
这就类似a=c;b=d,你不能光看a和b很像,c和d的值不一样a和b的值能一样吗
-=-=-=-=-=-=
一般只要涉及到next,大概率它是个链表的结构
具体可以转到定义去看它到底是怎么实现的,即使它来自类库,那好歹有注释说明它是干什么的

问题1、dlCounter与ulCounter值为啥不一样
这个其实好理解,通过肢解分析如下:
dl是定义列表,会默认前后层级关系。
ul是无序列表,也就是说没有排列限制可以随意加
Counter表示计数器

img

一个是init()方法,一个是refresh()方法,所以虽然代码一模一样,但方法不一样
问题2、NextSample().RawValue含义
获取计数器的原始值,且自行计算网卡上传下载速率

img


问题1:init方法是初始化方法
dlValueOld:下行数据的当前初始值
ulValueOld:上行数据的当前初始值
所以一个是上行数据,一个是下行数据,初始化时,值就有可能是不同的
refresh是刷新方法
dlValue:当前上行数据刷新值
ulValue:当前下行数据刷新值
问题2:NextSample().RawValue是获取计数器的原始值,且自行计算网卡上传下载速率;
所以在使用时,获取的就是当前上行数据与下行数据的最新值