You need to enable JavaScript to run this app. 如何在VB.NET应用中准确测试互联网下载速度(单位Mbps)
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB.NET应用中准确测试互联网下载速度(单位Mbps)

问题分析

你最初使用的NetworkInterface.Speed属性获取的是本地网卡的标称最大链路速率,而非实际访问互联网的实时传输速度,该值是固定的硬件参数,和实际公网带宽、网络拥堵情况完全无关,因此无法得到正确的测速结果。

正确实现思路
  • 选择一个体积已知、线路稳定的公共测试文件(建议大小在5MB~100MB之间,文件过小将导致误差过大)
  • 发起HTTP请求下载该文件,记录下载开始时间、结束时间,统计实际下载的字节总数
  • 通过单位换算得到Mbps单位的下载速度:下载速度(Mbps) = (实际下载字节数 * 8) / 下载耗时(秒) / 1000000(注:若需按二进制换算则将1000000替换为1048576)
实现代码

首先导入所需命名空间:

Imports System.Net.Http
Imports System.Diagnostics

测速逻辑实现:

' 异步测速方法,返回Mbps单位的下载速度
Private Async Function GetDownloadSpeedMbps() As Task(Of Double)
    ' 替换为你自行选择的稳定测试文件直链地址,建议选对应运营商的官方测速文件
    Const testFileUrl As String = "你的测试文件直链地址"
    ' 字节转兆比特换算系数:1字节=8比特,1兆比特=10^6比特
    Const bytesToMbitsFactor As Double = 8 / 1000000

    Using httpClient As New HttpClient()
        ' 禁用缓存避免影响测速结果
        httpClient.DefaultRequestHeaders.CacheControl = New Headers.CacheControlHeaderValue With {.NoCache = True}
        Dim stopwatch As Stopwatch = Stopwatch.StartNew()
        ' 下载文件到内存
        Dim fileBytes As Byte() = Await httpClient.GetByteArrayAsync(testFileUrl)
        stopwatch.Stop()

        ' 计算速度,保留2位小数
        Dim elapsedSeconds As Double = stopwatch.Elapsed.TotalSeconds
        Dim speedMbps As Double = (fileBytes.Length * bytesToMbitsFactor) / elapsedSeconds
        Return Math.Round(speedMbps, 2)
    End Using
End Function

' 调用示例(以WinForm按钮点击事件为例)
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Label3.Text = "测速中..."
    Dim speed As Double = Await GetDownloadSpeedMbps()
    Label3.Text = $"{speed} Mbps"
End Sub
注意事项
  • 测试文件请选择和你目标用户网络匹配的节点资源,避免跨运营商、跨地域导致的测速结果偏低
  • 若要提高准确性可多次测速取平均值,同时避免测速过程中其他应用占用带宽
  • 如果程序需要兼容.NET Framework低版本,可以将HttpClient替换为WebClient实现,逻辑完全一致
  • 该方法测得的是实际可达到的下载速率,和运营商标称带宽会有合理范围内的误差

内容的提问来源于stack exchange,提问作者Break Inside

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 09:30:03