gpt4 book ai didi

c# - HttpClient 中有多少个连接

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:11 27 4
gpt4 key购买 nike

背景

我必须从 Internet 下载大约 16k 个文档和相同数量的 html 页面。 future 这个数字还会增加。目前我只是使用 Parallel.ForEach 并行下载和处理数据。然而,这似乎并没有充分利用我的资源,所以我计划让 async/await 发挥作用,尽可能多地异步运行下载,但我可能不得不限制它。

真题

单个 HttpClient 可以打开多少个连接?创建如此多的连接时,我还必须牢记哪些其他因素?我知道我应该重用相同的 HttpClient 并且我还阅读了 this answer ,但我怀疑我真的可以同时打开数十亿个连接。

最佳答案

首先,关于从 Parallel.ForEach 切换到 async/await 的良好调用。通过摆脱线程的限制,您将能够按数量级提高并发性。

I have doubts that I can really have several billion connections open at once.

假设您可以。你认为这项工作会比你同时打开 1000 个工作更快地完成吗?您首先要遇到的限制是带宽(或者可能是服务器拒绝请求),而不是并发连接。因此,如果您的目标是尽快完成工作,我建议您一次可以打开的最大连接数甚至都不重要。

也就是说,.NET 有默认限制。假设您使用的是完整框架或 .NET Core 2.x,可以通过 ServicePointManager.DefaultConnectionLimit 以编程方式更改限制。 ,其默认值仅为 2。将其设置为更大的值。

接下来,我建议使用 SemaphoreSlim 或 TPL Dataflow 设置您的代码,以同时执行下载达到某个限制。 this question 的答案中很好地涵盖了这两种方法。 .然后开始试验,直到你想出一个最佳数字。很难说那是什么。也许从 50 开始。如果进展顺利,将其增加到 100,看看整个作业是否完成得更快。如果您开始收到从服务器返回的套接字异常或错误,请调低它。

关于c# - HttpClient 中有多少个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51285724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com