Je dois envoyer environ 200 demandes HTTP en parallèle à différents serveurs et obtenir une réponse.
J'utilise la classe httpwebrequest en C #.
Mais je ne vois pas l'amélioration du temps lorsque les demandes sont traitées en parallèle.
Par exemple, si une requête a besoin de 3 secondes pour obtenir une réponse, 2 demandes parallèle - 6Sec, 3 demandes - 8 secondes, 4 demandes - 11Sec ...
Ce n'est pas bon, j'espère qu'il devrait y avoir le meilleur temps, environ 10 secondes pour 200 demandes.
Il semble que seulement 2-3 demandes effectue en parallèle, mais le délai d'attente commence immédiatement après la création d'objets WebRequest.
J'ai essayé de définir Exemple de code que j'utilise pour tester: P> defaultconnectionLimit code> et maxservicePoints code> valeurs, mais je n'ai pas aidé. Comme je comprends ces paramètres pour le nombre de demandes d'un site en parallèle. J'ai besoin de demandes à différents sites. ArrayList a = new ArrayList(150);
for (i = 50; i < 250; i++ )
{
a.Add("http://207.242.7." + i.ToString() + "/");
}
for (i = 0; i < a.Count; i++)
{
Thread t = new Thread(new ParameterizedThreadStart(performRequest));
t.Start(a[i]);
}
static void performRequest(object ip)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create((stirng)ip);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
}
5 Réponses :
Utilisez des demandes Web asynchrones à Stead. P>
Edit: http://msdn.microsoft. COM / EN-US / Bibliothèque / 86WF6409 (vs.71) .aspx P>
Au lieu de démarrer vos propres threads Essayez d'utiliser les méthodes asynchrones de httpwebrequest tels que httpwebrequest.begingreesponse et httpwebrequest.begingetreQuestStream . P>
J'ai déjà une application multithread et doit exécuter ces demandes dans des threads déjà créés. Ce n'est qu'un exemple de code. Point est que lorsque les threads font partie de WebRequest.Create et GetResponse Actions Porfomance est très très lente. Aussi avant la demande HTTP, j'effectue une connexion TCP dans les mêmes threads sur le port de Sever's 80 pour savoir que le port est ouvert ou fermé et cela fonctionne très vite.
Cela pourrait aider - suggère qu'il existe une limite sur le nombre de connexions TCP autorisées, mais que vous pouvez augmenter la limite p>
Plus de détails ici aussi - Arnosoftwaredev.blogspot.com/2006/ 09 / ... C'est presque certainement le problème de votre frappe
Bien que .. Vos liens semblent faire référence à des connexions simultanées à One Host i>, et à partir de l'exemple de la question, l'OP apporte des connexions à plusieurs hôtes différents ... est-ce le cas ou que .NET a Une limite de connexion maximale à n'importe quel hôte i> aussi?
@Patrick pense que vous avez un point. Dépend Je suppose que si les 200 de ses demandes vont à différents serveurs ou disent 10 au premier serveur, 20 à la prochaine, 5 à la prochaine, etc., cela frapperait le problème. Sinon, ce n'est peut-être pas le problème. Vaut un essai au moins
Vous pouvez essayer ceci:
Ceci est le code d'application Android d'envoi de la demande. Comment pouvons-nous utiliser le code supérieur comme:
J'ai moi-même un problème similaire, il semble que webrequest.create () réutiliser la même connexion TCP pour une raison quelconque. Je me demande si vous avez découvert quelle est la réponse à votre question?