2009-06-05 5 views
2

J'ai implémenté un crawler multithread en C#. En utilisant un pool de threads personnalisé, il y a une file d'attente, toutes les pages à télécharger sont mises en file d'attente et chaque thread en prend un et les télécharge. En utilisant 15 fils, En rampant sur un seul site, il est lisse comme de la soie et se fait rapidement. Lors de l'exploration de plusieurs sites sur différents serveurs en même temps, je reçois des TONS de délais d'attente.C# MultiThreaded HttpWebRequest timeouts .. Aide!

Cela peut-il avoir quelque chose à voir avec la résolution DNS? Selon vous, qu'est-ce qui pourrait provoquer cela?

Merci. Roey

+0

Donc, si vous exécutez 15 threads, chacun accédant à un serveur différent, vous obtenez des délais d'attente de chacun d'eux? – Sesh

+0

Ce n'est pas cohérent .. certains serveurs me donnent beaucoup de timeouts, d'autres non L'exécution sur chaque serveur indépendamment (mais avec le même nombre de threads) produit presque aucun délai. – Roey

Répondre

2

Vraisemblablement, vous l'utilisez sous Windows. Bien que vous puissiez configurer le nombre de connexions autorisées par HttpWebRequest, cela ne modifie pas les limites imposées par Windows. Par exemple, je crois comprendre qu'avec XP SP2, Microsoft a imposé une limite de 10 connexions par seconde. Si vous avez un grand nombre de connexions qui attendent d'être autorisées à s'ouvrir, elles peuvent être en cours d'exécution en raison de l'absence d'autorisation à temps.

Certes, je n'ai pas beaucoup de perspicacité dans le problème depuis que je n'ai jamais rencontré le problème. Essayez de réduire le nombre de connexions que vous essayez de faire et voyez si cela réduit les délais.

+1

Je pense que la limite de connexion est par serveur - pas plus de 10 connexions en direct à un serveur. Son robot parle à plus d'un serveur. – Sesh