多次执行Invoke-WebRequest速度异常缓慢问题求助
Invoke-WebRequest重复执行变慢的原因及解决办法
可能的原因
- ISE会话资源泄漏:首次运行请求后,PowerShell ISE的会话中可能残留了未正确释放的网络连接资源(比如HTTP连接池中的连接未回收)。后续请求复用这些资源时出现阻塞,导致速度骤降。重启ISE会重置整个会话环境,释放所有占用的资源,因此问题消失。
- 会话级状态残留:即使使用了
-UseBasicParsing,PowerShell的Web请求模块可能在当前会话中保留了DNS缓存、Cookie或其他会话状态数据。这些残留数据会干扰后续请求的处理流程,引发性能问题,重启ISE则会清空所有会话状态。 - 后台异步操作未完成:首次请求看似返回了输出,但后台可能还有未完成的异步处理任务(比如资源下载、连接清理),这些任务占用了会话的网络资源,导致后续请求被阻塞。重启ISE直接终止了这些后台任务,恢复了正常的请求速度。
解决办法
- 手动释放响应资源:每次请求完成后,调用响应对象的
Dispose()方法,避免资源泄漏:$timer = [Diagnostics.Stopwatch]::StartNew() $ProgressPreference = 'SilentlyContinue' try { $resp = Invoke-WebRequest -uri 'https://www.canada.ca/en/immigration-refugees-citizenship/news/2023/07/minister-fraser-to-make-an-important-announcement.html' -UseBasicParsing } finally { $ProgressPreference = 'Continue' if ($resp) { $resp.Dispose() } } $timer.Stop() $timer - 重置会话环境:如果需要重复执行请求,每次运行前关闭当前ISE窗口并重新打开,或者使用ISE的新标签页运行代码,避免会话资源累积。
- 替换请求命令:尝试用
Invoke-RestMethod代替Invoke-WebRequest,两者底层实现不同,可能避开会话级的资源问题。
内容的提问来源于stack exchange,提问作者Marc Codere Dussault
相关产品推荐
相关产品推荐

