WebClient est très lent
J'ai un problème avec Webclient.
Il est très lent. Il faut environ 3 à 5 secondes pour downloadString d'un site web.
Je n'ai pas de problèmes de réseau.
C'est mon Modifiés WebClient.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
namespace StatusChecker
{
class WebClientEx: WebClient
{
public CookieContainer CookieContainer { get; private set; }
public WebClientEx()
{
CookieContainer = new CookieContainer();
ServicePointManager.Expect100Continue = false;
Encoding = System.Text.Encoding.UTF8;
WebRequest.DefaultWebProxy = null;
Proxy = null;
}
public void ClearCookies()
{
CookieContainer = new CookieContainer();
}
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = CookieContainer;
}
return request;
}
}
}
Mise à JOUR:
Dans wireshark, j'ai vu que seul DownladString est l'envoi et la réception de quelques milliers de paquets.
source d'informationauteur Hooch
Vous devez vous connecter pour publier un commentaire.
Il peut y avoir deux questions à portée de main ici (que j'ai d'ailleurs remarqué dans mes propres programmes précédemment):
WebRequest
par défaut détecte et charge les paramètres de proxy de la première fois qu'il démarre, ce qui peut prendre un certain temps. Pour arrêter cela, il suffit de définir le proxy de la propriété (WebRequest.Proxy
) ànull
et il va contourner le contrôle (à condition que vous pouvez directement accéder à l'internet)ServicePointManager.DefaultConnectionLimit
à quelque chose de plus grand. J'ai l'habitude de définir ce àint.MaxValue
(assurez-vous de ne pas spam de l'hôte avec 1 000 000 de connexions).Peut-être que ça aidera quelqu'un. Certains services web en charge la compression (gzip ou autres). Ainsi, vous pouvez ajouter-tête Accept-Encoding pour vos demandes et ensuite activer décompression automatique pour le client web de l'instance. Chrome fonctionne de cette façon.
Il ya quelques options si elle est liée à la première paramètres du proxy en cours de vérification:
Définir le proxy à null:
WebClient.Proxy = null
De démarrage de l'application, par défaut, webproxy à null:
WebRequest.DefaultWebProxy = null;
En plus .NET code au lieu de mettre à null, vous avez utilisé pour écrire ceci (mais la valeur null est maintenant préféré):