作者:瑶看瀑布挂前川 | 来源:互联网 | 2023-05-28 11:24
我做了一些简单的测试比较和我发现的一些信息
单个HttpClient可以由多个请求共享,如果共享并且请求到达同一目的地,则多个请求可以重用WebRequest需要为每个请求重新创建连接的连接.
我还查阅了一些关于使用HttpClient示例的其他方法的文档
以下文章总结了高速NTLM身份验证的连接共享
HttpWebRequest.UnsafeAuthenticatedConnectionSharing
我尝试过的可能实现如下所示
一个)
private WebRequestHandler GetWebRequestHandler()
{
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(ResourceUriCanBeAnyUri, "NTLM", CredentialCache.DefaultNetworkCredentials);
WebRequestHandler handler = new WebRequestHandler
{
UnsafeAuthenticatedCOnnectionSharing= true,
Credentials = credentialCache
};
return handler;
}
using (HttpClient client = new HttpClient(GetWebRequestHandler(), false))
{
}
B)
using (HttpClient client = new HttpClient)
{
}
C)
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("some uri string")
我将不胜感激任何帮助,让我了解应该采取哪种方法,以实现最大性能,最小化连接并确保安全性不受影响.
1> 小智..:
如果你使用异步中的任何一个,它应该对性能观点有利,因为它不会阻塞等待响应的资源,你将获得良好的吞吐量.
由于开箱即用的异步方法,HttpClient优于HttpWebRequest,因此您不必担心编写开始/结束方法.
基本上当你使用异步调用(使用任何一个类)时,它不会阻塞等待响应的资源,任何其他请求都会利用这些资源进行进一步的调用.
另外要记住的是,您不应该在"使用"块中使用HttpClient来允许一次又一次地为其他Web请求重用相同的资源.
有关更多信息,请参阅以下主题
是否必须处理HttpClient和HttpClientHandler?