Like its predecessor, the Surface Pro 3 has been plagued by a number of Wi-Fi issues since its release. Microsoft has since released firmware and driver updates that have alleviated some of the problems (e.g. link speed maxing out at 72 Mbps on the 2.4 GHz band), but some issues remain.
Even with all patches installed as of this writing, the Wi-Fi on my Surface Pro 3 still degrades after resuming from connected standby. While the driver reports a normal link speed, actual throughput drops to a fraction of what it should be, and the connection is riddled with random stuttering and latency spikes, with pings to LAN hosts jumping from the normal 1-2 ms to anywhere from 400 to 2,000 ms. This problem is not obvious if one is merely browsing the Web, but attempting to stream, say, recorded TV on Windows Media Center results in an infuriating buffering mess.
Rumor has it that disabling connected standby (either via a registry setting or as a side effect of installing the Hyper-V hypervisor) resolves all Wi-Fi problems on the Surface Pro 3. However, this is hardly acceptable for those of us who want our Surface to behave like a tablet as opposed to a miniature desktop.
In my experience, resetting the Marvell AVASTAR wireless adapter fixes all issues until the Surface next goes to sleep. However, manually disabling and reenabling the adapter every time I woke up my Surface to stream video got old really quickly, so I figured out a way to automate this.
We can use the Task Scheduler to set up a task that automatically resets the Wi-Fi adapter whenever the Surface Pro 3 resumes from connected standby. Here’s how:
- Open the Task Scheduler.
- Right click the Task Scheduler Library folder, and select Create Task.
- Configure the new scheduled task as follows:
- General tab:
- Name: Reset Wi-Fi
- When running the task, use the following user account: SYSTEM
- Run whether user is logged on or not
- Run with highest privileges: Yes
- Configure for: Windows 8.1
- Triggers tab — create a new trigger configured as follows:
- Begin the task: On an event
- Log: System
- Source: Kernel-Power
- Event ID: 507
- Actions tab — create a new action configured as follows:
- Action: Start a program
- Program/script: %SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe
- Add arguments: -Command “Restart-NetAdapter -Name Wi-Fi”
- Conditions tab:
- Start the task only if the computer is on AC power: No
- General tab: