c# - HTTPWebResponse + StreamReader 非常慢

标签 c# performance web-crawler httpwebresponse streamreader

我正在尝试用 C# 实现一个有限的网络爬虫(仅适用于几百个站点) 使用 HttpWebResponse.GetResponse() 和 Streamreader.ReadToEnd() ,还尝试使用 StreamReader.Read() 和一个循环来构建我的 HTML 字符串。

我只下载大约 5-10K 的页面。

一切都很慢!例如,平均 GetResponse() 时间约为半秒,而平均 StreamREader.ReadToEnd() 时间约为 5 秒!

所有站点都应该非常快,因为它们离我的位置非常近,并且拥有快速的服务器。 (在 Explorer 中几乎不需要 D/L)而且我没有使用任何代理。

My Crawler 有大约 20 个线程同时从同一站点读取。这会导致问题吗?

如何大幅减少 StreamReader.ReadToEnd 时间?

最佳答案

HttpWebRequest 可能需要一段时间才能检测到您的 proxy settings .尝试将其添加到您的应用程序配置中:

<system.net>
  <defaultProxy enabled="false">
    <proxy/>
    <bypasslist/>
    <module/>
  </defaultProxy>
</system.net>

通过缓冲读取以减少对底层操作系统套接字的调用次数,您可能还会看到轻微的性能提升:

using (BufferedStream buffer = new BufferedStream(stream))
{
  using (StreamReader reader = new StreamReader(buffer))
  {
    pageContent = reader.ReadToEnd();
  }
}

关于c# - HTTPWebResponse + StreamReader 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/901323/

相关文章:

c# - 在公共(public) API 中传达字符串参数用途的最佳方式是什么?

javascript - 如何更改我的代码以便能够计算不同的网址而不是当前页面

c - 有效地检查 Bitflag 不变性(可能的位旋转)

node.js - 如何使用nodejs爬取javascript(vuejs、reactjs)网站

python - 无法使用 scrapy 蜘蛛抓取特定网站的元素

c# - Stream 意外结束,内容可能已被另一个组件读取。 Microsoft.AspNetCore.WebUtilities.MultipartReaderStream

c# - 在 C# 中为多个 ID 读取多个 Outlook 电子邮件

C# 十进制到 byte[] 并在 C 中返回

java - 为什么 Java String.indexOf() 优于用户定义类中实现的相同逻辑?

asp.net-mvc - 主流搜索引擎无法抓取 MVC 站点?