加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 无法解析DNS(有时?)

发布时间:2020-12-16 02:02:16 所属栏目:百科 来源:网络整理
导读:鉴于一个应用程序并行请求100个URL一次为10000个URL,我将收到50-5000个以下错误: The remote name cannot be resolved ‘www.url.com’ 我知道错误意味着DNS服务器无法解析网址.但是,对于每次运行,无法解析的URL数量会发生变化(范围从50到5000). 我提出的请
鉴于一个应用程序并行请求100个URL一次为10000个URL,我将收到50-5000个以下错误:

The remote name cannot be resolved ‘www.url.com’

我知道错误意味着DNS服务器无法解析网址.但是,对于每次运行,无法解析的URL数量会发生变化(范围从50到5000).

我提出的请求太快了吗?我甚至可以这样做吗? – 在功能更强大的服务器上运行相同的测试,显示只有10个网址无法解析 – 这听起来更加真实.

执行并行请求的代码:

var semp = new SemaphoreSlim(100);
var uris = File.ReadAllLines(@"C:urls.txt").Select(x => new Uri(x));

foreach(var uri in uris)
{
   Task.Run(async () =>
   {
      await semp.WaitAsync();
      var result = await Web.TryGetPage(uri); // Using HttpWebRequest
      semp.Release();
   });   
}

解决方法

我敢打赌,你不知道HttpWebRequest的DNS查询(这是所有.net http apis的基石)同步发生,即使在发出异步请求时(烦人,对吧?).这意味着立即触发许多请求会导致严重的ThreadPool压力和大量延迟.这可能会导致意外超时.如果您真的想要解决问题,请不要使用.net dns实现.您可以使用 third party library来解析主机并使用ip而不是主机名创建webrequest,然后在触发请求之前手动设置主机头.您可以通过这种方式实现更高的吞吐量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读