J'ai des problèmes pour utiliser HttpClient dans plusieurs threads..NET HttpClient multithread
Si je lance de nombreux téléchargement en même temps, le premier téléchargement de chaque fil est très lent (et augmentent avec des fils parallèles)
Par exemple, si j'ai un fil, tout va bien
First download Elapsed Time Download: 197 ms
Second download Elapsed Time Download: 171 ms
mais avec un fil, le temps de téléchargement augmenter
First download Elapsed Time Download: 3881 ms
...
Second download Elapsed Time Download: 96 ms
...
réseau n'est pas une bande passante problème, j'ai même problème avec localhost.
Voici un code pour reproduire le problème:
static void Main(string[] args)
{
ServicePointManager.DefaultConnectionLimit = 200;
List<Task> tasks = new List<Task>();
for (var i = 0; i < 10; i++)
{
tasks.Add(
Task.Factory.StartNew(() =>
{
Stopwatch s = Stopwatch.StartNew();
HttpClient httpClient = new HttpClient();
HttpResponseMessage httpDownloadResponse = httpDownloadResponse = httpClient.GetAsync("http://www.google.fr/", HttpCompletionOption.ResponseHeadersRead).Result;
s.Stop();
Console.WriteLine("First download Elapsed Time Download: {0} ms", s.ElapsedMilliseconds);
s = Stopwatch.StartNew();
httpClient = new HttpClient();
httpDownloadResponse = httpClient.GetAsync("http://www.google.fr/", HttpCompletionOption.ResponseHeadersRead).Result;
s.Stop();
Console.WriteLine("Second download Elapsed Time Download: {0} ms", s.ElapsedMilliseconds);
})
);
}
Task.WaitAll(tasks.ToArray());
while (Console.ReadLine() != null) ;
}
@Adriano - 'Console' est threadsafe, et n'est pas inclus dans les timings. –
@BrianReischl mon mauvais! –
Il peut être lié (ou non), mais la convention observée par .net est que seules trois connexions HTTP à la même URL sont autorisées à partir d'un système d'exploitation client particulier. Ceci est défini dans ServicePointManager.DefaultConnectionLimit. Ceci est discuté ici http://stackoverflow.com/questions/866350/how-can-i-programmatically-remove-the-2-connection-limit-in-webclient et peut vous amener à observer un ralentissement spectaculaire des activités http parallèles sur la même URL. – PhillipH