You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Windows.Devices.Enumeration.DeviceInformation.FindAllAsync获取WiFi列表速度慢?

WiFi搜索慢的原因与优化方案

一、FindAllAsync(WiFiAdapter.GetDeviceSelector())速度慢的核心原因

  1. 枚举机制与扫描策略不匹配
    这个API本质是枚举系统中的WiFi适配器设备,而非直接扫描WiFi网络。你看到的网络列表,实际是适配器后续返回的扫描结果。Windows默认采用低功耗被动扫描策略:仅等待WiFi设备主动发送的Beacon帧,而非主动触发全频段扫描,所以首次获取结果依赖Beacon帧的接收时机,信号好的网络也可能因系统延迟上报(比如为了省电合并扫描请求)导致30秒才显示。
  2. 首次调用的初始化开销
    首次调用该API时,系统需要初始化WiFi适配器的底层接口、加载驱动关联的资源,这部分额外开销会导致2-3秒的延迟。
  3. 与系统开机连接的差异
    系统开机时的WiFi连接是基于缓存的已知网络列表+定向快速扫描:系统优先读取已保存的网络信息,直接针对目标SSID触发定向扫描,而非全量枚举所有适配器和网络,因此速度远快于全量扫描。

二、更快的WiFi搜索/连接方案

1. 主动触发定向扫描

不要依赖系统被动扫描,拿到WiFiAdapter后主动调用ScanAsync,缩小扫描范围提升速度:

// 获取第一个可用的WiFi适配器
var adapters = await DeviceInformation.FindAllAsync(WiFiAdapter.GetDeviceSelector());
if (adapters.Any())
{
    var adapter = await WiFiAdapter.FromIdAsync(adapters.First().Id);
    // 主动触发扫描
    await adapter.ScanAsync();
    // 立即获取最新扫描结果
    var networks = adapter.NetworkReport.AvailableNetworks;
}

2. 使用DeviceInformation.CreateWatcher实时监听

相比一次性返回结果的FindAllAsync,CreateWatcher会异步监听设备/网络变化,扫描到网络时立即回调,无需等待全部结果:

var watcher = DeviceInformation.CreateWatcher(WiFiAdapter.GetDeviceSelector());
watcher.Added += (sender, args) =>
{
    // 实时处理新发现的适配器及关联网络
    _ = ProcessNewAdapterAsync(args.Id);
};
watcher.Start();

3. 直接连接已知网络(最优方案)

如果目标网络是已保存或已知SSID的,无需枚举所有网络,直接调用ConnectAsync:

var adapter = await GetFirstAvailableWiFiAdapter();
var credential = new PasswordCredential { Password = "your-password" };
var connectionResult = await adapter.ConnectAsync(
    new WiFiNetworkDisplay(knownNetwork), 
    WiFiReconnectionKind.Automatic, 
    credential);

这种方式会让系统直接针对目标SSID触发定向快速扫描,跳过全量枚举开销,和系统开机连接逻辑一致。

4. 读取系统缓存的网络列表

通过WiFiManager获取系统已保存的网络,优先使用缓存信息,再结合实时扫描补充:

var savedNetworks = await WiFiManager.GetSavedNetworksAsync();
// 优先从缓存中匹配目标网络,再决定是否触发实时扫描

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:35:19