C# 下载网页的最快方式是什么;什么消息来源?
我需要下载许多网页的来源。所以我需要尽快做到这一点。这是我的密码C# 下载网页的最快方式是什么;什么消息来源?,c#,multithreading,async-await,task,httpwebrequest,C#,Multithreading,Async Await,Task,Httpwebrequest,我需要下载许多网页的来源。所以我需要尽快做到这一点。这是我的密码 private static async Task<string> downloadsource(string link) { ServicePointManager.Expect100Continue = false; WebRequest req = WebRequest.Create(link); req.Proxy = null;
private static async Task<string> downloadsource(string link)
{
ServicePointManager.Expect100Continue = false;
WebRequest req = WebRequest.Create(link);
req.Proxy = null;
req.Method = "GET";
WebResponse res = await siteyeBaglantiTalebi.GetResponseAsync();
StreamReader read = new StreamReader(res.GetResponseStream());
return read.ReadToEnd();
}
List<string> links = new List<string>(){... including some web page links};
private static List<string> source_list(List<string> links)
{
List<string> sources = new List<string>();
for (int i = 0; i < links.Count; i++)
{
Task<string> _task = downloadsource(links[i]);
Console.WriteLine("Downloaded : " + i);
sources.Add(_task.Result);
}
return sources;
}
私有静态异步任务下载源(字符串链接)
{
ServicePointManager.Expect100Continue=false;
WebRequest req=WebRequest.Create(链接);
req.Proxy=null;
req.Method=“GET”;
WebResponse res=wait siteyeBaglantiTalebi.GetResponseAsync();
StreamReader read=新的StreamReader(res.GetResponseStream());
返回read.ReadToEnd();
}
列表链接=新列表(){…包括一些网页链接};
私有静态列表源\列表(列表链接)
{
列表源=新列表();
for(int i=0;i
我想知道这段代码是最快的方法还是可以增强的方法。
你能帮我一下吗?你正在执行一个
\u任务。结果在每个循环中调用。你的代码运行的速度就像你一个接一个地下载每个页面一样快
请尝试以下方法:
private async static Task<List<string>> source_list(List<string> links)
{
List<Task<string>> sources = new List<Task<string>>();
for (int i = 0; i < links.Count; i++)
{
Task<string> _task = downloadsource(links[i]);
Console.WriteLine("Downloading : " + i);
sources.Add(_task);
}
return (await Task.WhenAll(sources)).ToList();
}
即使有多个线程,这个过程中缓慢的部分始终是请求的实际服务(即网络流量)。如果Web服务器在短时间内拒绝大量请求,您可能会发现自己遇到一些不错的429(太多请求)错误。因此,您的意思是这种用法最快。我认为他的意思是,还有其他因素会影响算法的执行速度。其中两个是连接速度和主机服务器设置。我知道,但当我们假设这些因素正常时,仅从代码的角度来看?您正在执行一个\u任务。每个循环内的结果。你的代码运行的速度就像你一个接一个地下载每个页面一样快。
private async static Task<string[]> source_list(List<string> links)
{
return await Task.WhenAll(links.Select(l => downloadsource(l)));
}
private static async Task<string> downloadsource(string link)
{
ServicePointManager.Expect100Continue = false;
WebRequest req = WebRequest.Create(link);
req.Proxy = null;
req.Method = "GET";
using (WebResponse res = await req.GetResponseAsync())
{
using (StreamReader read = new StreamReader(res.GetResponseStream()))
{
return read.ReadToEnd();
}
}
}