J'essaie de faire fonctionner ce morceau de code un peu mieux. Je pense que c'est la boucle qui lit un octet à la fois. Je ne pouvais pas trouver une autre façon de le faire avec la décompression gzip. L'implémentation d'un StreamReader
est correcte, mais elle renvoie une chaîne que je ne peux pas transmettre au flux de décompression.C# télécharger une page Web. Un meilleur moyen est nécessaire, l'utilisation du processeur est élevée
Y a-t-il un meilleur moyen?
byte[] bufffer = null;
List<byte> resourceBytes = new List<byte>();
int byteValue = 0;
WebResource resource = new WebResource();
HttpWebResponse webResponse = null;
try {
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(resourceUri);
webRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
webRequest.Headers.Add(HttpRequestHeader.AcceptCharset, "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
webRequest.UserAgent = agent;
webRequest.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
webRequest.Credentials = CredentialCache.DefaultCredentials;
webRequest.Referer = resourceUri.OriginalString;
webRequest.Timeout = 5000;
webResponse = (HttpWebResponse)webRequest.GetResponse();
Stream webStream = webResponse.GetResponseStream();
if (!string.IsNullOrEmpty(webResponse.ContentEncoding)) {
if (webResponse.ContentEncoding.ToLower().Contains("gzip")) {
webStream = new GZipStream(webStream, CompressionMode.Decompress);
}
else if (webResponse.ContentEncoding.ToLower().Contains("deflate")) {
webStream = new DeflateStream(webStream, CompressionMode.Decompress);
}
}
do {
byteValue = webStream.ReadByte();
if (byteValue != -1) {
resourceBytes.Add((byte)byteValue);
}
} while (byteValue != -1);
//Free up resources
webStream.Close();
webResponse.Close();
bufffer = resourceBytes.ToArray();
Bonne réponse.Ceci est probablement la cause de la lenteur – samjudson
Correct - vous posté ce que je préparais une réponse en disant la même .... – NotJarvis
Sir Psycho - comment puis-je dire assez sur ce point fort: vous avez tort ... –