C# 从网站上抓取PowerShell的速度会随着时间的推移而减慢(分页)

C# 从网站上抓取PowerShell的速度会随着时间的推移而减慢(分页),c#,.net,powershell,C#,.net,Powershell,所以我有一个网站,我想刮从多个页面的具体链接。我已经成功地编写了一个脚本来实现这一点: $links = New-Object -TypeName System.Collections.Generic.List[String] for ($pageNumber = 1; $pageNumber -le 300; $pageNumber++) { $request = Invoke-WebRequest -Uri "https://example.com/$pageNumber" -WebSe

所以我有一个网站,我想刮从多个页面的具体链接。我已经成功地编写了一个脚本来实现这一点:

$links = New-Object -TypeName System.Collections.Generic.List[String]
for ($pageNumber = 1; $pageNumber -le 300; $pageNumber++) {
  $request = Invoke-WebRequest -Uri "https://example.com/$pageNumber" -WebSession $cookie
  $items = $request.Links | Where-Object title -eq "Title" | Select-Object -ExpandProperty href
  $links.Add($items)
}
我创建了一个字符串类型的泛型列表(T)的新实例。然后我设置了一个For循环,按顺序遍历300页,并将每页上找到的链接添加到通用列表中。这一切都很好,完成了工作,但这就是我的问题所在。对于前20-25个循环,它非常有效,大约为1.7-2.4秒/页。在那之后,它跳到5.7-6.8秒/页,我不知道为什么。我想不出是什么导致了速度的随机下降。我甚至尝试过改变收藏的类型。从散列集一直到堆栈。此外,我还完全更改了名称空间,并尝试了并发集合和专用集合,但都没有效果

如果有人能给我一些关于正在发生的事情以及我如何改进这种行为的见解,我将不胜感激


编辑:在@Persistent13建议隔离变量后,似乎Invoke WebRequest可能是减速的原因。有人能详细说明一下吗?

您是如何分析代码的?如何验证list对象的减速发生而不调用WebRequest?我在For循环中使用Stopwatch类<代码>$stopwatch=[System.Diagnostics.stopwatch]::开始时开始新建(),结束时<代码>$stopwatch.Stop()$stopwatch.appead.TotalSeconds。我还没有测试Invoke WebRequest是否会导致速度减慢。事实上,我甚至没有考虑过。在分离变量之后,我认为你可能是对的。看来,调用WebRequest可能是罪魁祸首。你知道为什么会这样吗?你是如何分析代码的?如何验证list对象的减速发生而不调用WebRequest?我在For循环中使用Stopwatch类<代码>$stopwatch=[System.Diagnostics.stopwatch]::开始时开始新建(),结束时<代码>$stopwatch.Stop()$stopwatch.appead.TotalSeconds。我还没有测试Invoke WebRequest是否会导致速度减慢。事实上,我甚至没有考虑过。在分离变量之后,我认为你可能是对的。看来,调用WebRequest可能是罪魁祸首。你知道为什么会这样吗?