簡體   English   中英

C#優化HttpWebRequest

[英]C# Optimize HttpWebRequest

我正在制作自己的HTTPWebRequest類,並且正在嘗試優化讀取緩沖區和發出請求所需的時間,到目前為止,對google.com的每個請求大約需要800-1000ms

在C ++中,相同的代碼需要200毫秒左右的時間來建議如何更好地優化它?

public class OWebReq
{
public string LastError;
public bool LastOK = false;
public OWebReq()
{

}
public static void Init()
{
    ServicePointManager.Expect100Continue = false;
    ServicePointManager.DefaultConnectionLimit = 9999;
    WebRequest.DefaultWebProxy = (WebProxy)null;
    ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
}
public string GET(string url, WebProxy proxy = null)
{
    LastOK = false;
    var req = (HttpWebRequest)WebRequest.Create(url);
    req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36";
    req.Proxy = proxy;
    req.KeepAlive = false;
    req.Timeout = 5000;
    req.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
    try
    {
        using(var response=(HttpWebResponse)req.GetResponse())
        {
            var responseStream = response.GetResponseStream();
            if(responseStream!=null)
            {
                using (var sr = new StreamReader(responseStream))
                {
                    return sr.ReadToEnd();
                }

            }
        }

    }
    catch (Exception ex)
    {
        LastError = ex.Message;
        return null;
    }
     return null;
 }
}

執行代碼直到var response=(HttpWebResponse)req.GetResponse()花費約350ms

嘗試將ServicePointManager.Expect100Continuereq.ServicePoint.Expect100Continue設置為false

基本要點是,請求最初僅發送標頭,並等待服務器以代碼100響應(繼續)。 上限為350ms。 收到響應后,將發送請求的正文。 這樣,當服務器無論如何都會拒絕該請求(需要重定向或身份驗證,或者標頭中出現錯誤等)時,您就不會在網絡上發出非常大的請求(具有許多MB的主體)。

鏈接有非常詳細的說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM