我想知道提出请求并将响应转换为字符串的最快方法是什么?我读到 webclient 基本上是 httpwebrequest 的辅助类。
我问的原因是,例如,我需要从 2000 个 url 中获得响应。并希望使其尽可能高效。
只需要知道 httpwebrequest 在 C# 中是否最快或者还有其他什么?
谢谢你。
我想知道提出请求并将响应转换为字符串的最快方法是什么?我读到 webclient 基本上是 httpwebrequest 的辅助类。
我问的原因是,例如,我需要从 2000 个 url 中获得响应。并希望使其尽可能高效。
只需要知道 httpwebrequest 在 C# 中是否最快或者还有其他什么?
谢谢你。
如果您使用的是 .net 4.5,您可以尝试使用现代 http 客户端,它是一个 nuget 包。它使用 .Net 4.5+ 异步模式,可以非常有效地使用您的线程。
这段代码很幼稚,但应该给你一个关于如何处理异步的提示
public async Task<IEnumerable<HttpResponseMessage>> GetStuffs(IEnumerable<string> uris)
{
var tasks = new List<Task<HttpResponseMessage>>();
var client = new HttpClient();
foreach (var uri in uris)
{
var task = client.GetAsync(uri);
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
return tasks.Select(x => x.Result);
}
使用哪种方法来执行请求对性能影响不大,等待服务器响应需要时间。
要执行多个请求,您可以使用WebClient
类中的异步方法。这样您就不必一次只等待一个响应。
选择要同时运行的合理数量的请求,并使用例如启动它们的DownloadDataAsync
方法。当响应到达时,将DownloadDataCompleted
触发事件(或等效事件,取决于您使用的方法)。处理事件以获取下载的数据,并开始另一个请求,直到您完成所有请求。
如果您从同一个域请求 URL,通常并行请求多个资源是没有好处的,如果您从不同域请求它们,则可以并行运行更多资源。