【发布时间】:2021-12-24 07:59:30
【问题描述】:
我写了一个代码来检查 url,但是,ir 的工作速度真的很慢。我想尝试让它同时在几个 url 上工作,例如 10 个 url,或者至少让它尽可能快。
我的代码:
Parallel.ForEach(urls, new ParallelOptions {
MaxDegreeOfParallelism = 10
}, s => {
try {
using(HttpRequest httpRequest = new HttpRequest()) {
httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0";
httpRequest.Cookies = new CookieDictionary(false);
httpRequest.ConnectTimeout = 10000;
httpRequest.ReadWriteTimeout = 10000;
httpRequest.KeepAlive = true;
httpRequest.IgnoreProtocolErrors = true;
string check = httpRequest.Get(s + "'", null).ToString();
if (errors.Any(new Func < string, bool > (check.Contains))) {
Valid.Add(s);
Console.WriteLine(s);
File.WriteAllLines(Environment.CurrentDirectory + "/Good.txt", Valid);
}
}
} catch {
}
});
【问题讨论】:
-
另外,顺便说一句,一些 Web 服务器可能不会并行处理您的请求(因为它可能看起来像 DoS 攻击,或者它只是限制了来自 IP 的连接数)。仅仅因为您并行发出 10 个请求并不意味着 Web 服务器将并行向您返回数据。它可能仍会将数据返回给您,就像您发送它们一样发送请求 -> 接收响应 -> 发送 -> 接收等等。
-
MaxDegreeOfParallelism 考虑的是您机器的处理能力,而不是集合中的记录数。如果您有双核,它将并行处理 2 条记录。另一方面,浏览器可以并行发送更多请求,但不幸的是服务器不能。
-
那么我怎样才能让它更快呢?其他工具如何真正快速?甚至与我做同样事情的工具
-
@RohitRamname 等待 10 个 HTTP GET 将消耗多少处理能力?让我猜猜:零?
-
@SirRufo,我想也是。我也可以使用这个问题的解决方案。