我正在尝试用 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/