TrafficMonitor是Windows下唯一免安装、单文件、高精度网速曲线方案,调用IP Helper API毫秒采样并内置EWMA滤波,支持缩放拖拽与CSV录制;Resource Monitor可快速查看原始脉冲图但无法导出;Python脚本提供完全自定义采集绘图能力。

你需要在Windows系统中直观看到网速随时间变化的连续曲线,而不是任务栏里跳动的瞬时数字——这意味着要捕获带时间戳的速率序列、做平滑处理、再渲染成可缩放拖拽的图形界面,不能只靠资源监视器里那个刷新卡顿又不能保存的历史图。
用TrafficMonitor绘制高精度网速变化曲线
这是目前唯一能在Windows原生环境下免安装、不写注册表、单文件启动就生成带时间轴曲线图的方案。它底层调用IP Helper API逐毫秒采样,比任务管理器的性能计数器延迟更低,且内置EWMA滤波算法,能压平TCP突发包导致的毛刺,让曲线真正反映带宽使用趋势。
第一步:访问Gitee官方仓库 https://gitee.com/zhongyang219/TrafficMonitor → 下载最新TrafficMonitor.zip → 解压到任意非系统盘目录(如D:\Tools\TrafficMonitor)。
第二步:双击TrafficMonitor.exe启动程序 → 首次运行会弹出设置向导 → 在【Network Adapter】下拉框中【必须选中你当前活跃的物理网卡,例如“Intel(R) Wi-Fi 6E AX211”或“Realtek RTL8125 2.5GbE”,禁用的虚拟网卡或蓝牙适配器会导致曲线恒为0】 → 勾选【Enable network monitoring】→ 点击【OK】。
第三步:右键托盘图标 → 选择【Show main window】→ 主窗口顶部即显示实时曲线图,默认X轴为最近60秒,Y轴单位自动切换(KB/s或MB/s)。鼠标滚轮可缩放时间轴,按住左键拖拽可平移查看历史段。
第四步:点击窗口右上角【Record】按钮 → 选择保存路径 → 开始录制后,所有采样点(含时间戳、收发速率、进程级流量)将存为CSV文件,每行格式为:2026-10-22 19:05:23.412,142857,28571 → 后续可用Excel或Python直接绘图分析。
用Resource Monitor看原始带宽脉冲图
如果你只需要快速验证某一时段是否存在异常流量尖峰,且不关心中文界面或长期记录,系统自带工具就能满足。它的图表是内核级采样,无第三方注入风险,但缺点是无法导出数据、不能暂停刷新、历史仅保留1分钟。
方法一:按Ctrl+Shift+Esc打开任务管理器 → 切换到【性能】选项卡 → 滚动到底部点击【打开资源监视器】→ 切换到【网络】选项卡。
方法二:在资源监视器【网络】页左下角勾选【显示所有用户】→ 确保顶部【总接收】和【总发送】两个折线图已启用 → 图表会以约1秒间隔刷新,横轴固定为60秒,纵轴单位为B/s。注意:此处数值未经滤波,TCP重传、ACK包等都会形成密集毛刺,不适合判断持续占用。
直播话术巡检系统(Windows版) — 实时语音转写、关键词检测、场景自动切换、告警推送、大屏可视化。支持 Windows VB-Cable 虚拟声卡音频采集,阿里云 ASR 实时识别。一键启动脚本,自动安装环境。
这一步操作起来很简单,直接把文件拖进去就行。但若发现曲线频繁触顶,立刻按Alt+Tab切回资源监视器 → 点击【网络】页的【接收(B/s)】列排序 → 顶部进程就是当前真实下载主力,不用猜。
用Python脚本自定义曲线采集与绘图
当你需要把网速曲线嵌入自有监控平台、或叠加CPU/温度等多维指标时,手动调用psutil + matplotlib是最可控的方式。它绕过所有GUI框架限制,采样频率可精确到100ms,且能绑定指定网卡索引避免名称变更失效。
① 安装依赖:在命令行中执行 pip install psutil matplotlib pywin32 → 注意必须用管理员权限运行脚本,否则无法获取全进程网络数据。
② 新建speed_plot.py,粘贴以下代码:
import psutil, matplotlib.pyplot as plt, time, threading
from collections import deque
net_io = psutil.net_io_counters(pernic=True)
nic_name = "Wi-Fi" # 替换为你实际网卡名,用psutil.net_if_addrs()查
rx_history = deque(maxlen=300)
tx_history = deque(maxlen=300)
time_history = deque(maxlen=300)
def collect_data():
while True:
io = psutil.net_io_counters(pernic=True)[nic_name]
rx_history.append(io.bytes_recv)
tx_history.append(io.bytes_sent)
time_history.append(time.time())
time.sleep(0.1)
threading.Thread(target=collect_data, daemon=True).start()
plt.ion()
fig, ax = plt.subplots()
line_rx, = ax.plot([], [], 'b-', label='Download')
line_tx, = ax.plot([], [], 'r-', label='Upload')
ax.legend()
while True:
if len(time_history) > 1:
t = list(time_history)
rx = [0] + [(rx_history[i]-rx_history[i-1])/0.1/1024/1024 for i in range(1,len(rx_history))]
tx = [0] + [(tx_history[i]-tx_history[i-1])/0.1/1024/1024 for i in range(1,len(tx_history))]
line_rx.set_data(t[-len(rx):], rx)
line_tx.set_data(t[-len(tx):], tx)
ax.relim()
ax.autoscale_view()
plt.pause(0.1)
③ 双击运行speed_plot.py → 弹出实时更新的Matplotlib窗口,蓝色为下载、红色为上传,横轴为系统时间,纵轴单位为MB/s。关闭窗口即停止采集,无后台残留。
注意:脚本中nic_name必须严格匹配系统网卡显示名,大小写敏感。若不确定,先在Python中运行 list(psutil.net_if_addrs().keys()) 查看真实列表。










