J'ai un robot qui télécharge les pages et les traite. après 1 heure chaque requête aux sources prend 1 minute ou plus pour terminer mais au début du programme chaque adresse est téléchargée sous 1 seconde, je suspecte que les sites web de destination limitent ma demande ou trafic mais quand je ferme le programme et le lance la performance redevient normale. donc il y a un problème avec mon code Toute aide serait grandement apprécierHttpWebReqest dans la page fetcher slow down
public class PageFetcher
{
public PageFetcher() { }
public PageFetcher(string urlAddress) { URLAddress = urlAddress; }
private int relayPageCount = 0;
public string URLAddress { get; set; }
public string FetchingEncoding { get; set; }
public PageFetchResult Fetch()
{
PageFetchResult fetchResult = new PageFetchResult();
HttpWebRequest req = null;
HttpWebResponse resp = null;
try
{
req = (HttpWebRequest)HttpWebRequest.Create(URLAddress);
req.UserAgent = "Mozilla/4.0";
req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
resp = (HttpWebResponse)req.GetResponse();
string resultHTML = "";
byte[] reqHTML = ResponseAsBytes(resp);
Stream resultStream = new MemoryStream(reqHTML);
resultStream.Position = 0;
string contentEncoding = resp.ContentEncoding.ToLower();
if (contentEncoding.Contains("gzip") || contentEncoding.Contains("deflate"))
{
if (contentEncoding.Contains("gzip"))
resultStream = new GZipStream(resultStream, CompressionMode.Decompress);
if (contentEncoding.Contains("deflate"))
resultStream = new DeflateStream(resultStream, CompressionMode.Decompress);
}
StreamReader readerStream = null;
if (!string.IsNullOrEmpty(FetchingEncoding))
readerStream = new StreamReader(resultStream, Encoding.GetEncoding(FetchingEncoding));
else if (!string.IsNullOrEmpty(resp.CharacterSet))
readerStream = new StreamReader(resultStream, Encoding.GetEncoding(resp.CharacterSet));
resultHTML = readerStream.ReadToEnd();
req.Abort();
resp.Close();
fetchResult.IsOK = true;
fetchResult.ResultHTML = resultHTML;
URLAddress = resp.ResponseUri.AbsoluteUri;
}
catch (Exception ex)
{
if (req != null)
req.Abort();
if (resp != null)
resp.Close();
fetchResult.IsOK = false;
fetchResult.ErrorMessage = ex.Message;
}
return fetchResult;
}
Oui aller chercher va ralentir et je regarde dans HttpWebResponse.GetResponse() qui est le criminel principal! pensez-vous qu'il est lié au site Web de destination ou l'autre extrémité? – Ehsan