如何提高HttpWebResponse的性能?

Tum*_*may 3 c# performance https httpwebrequest

我正在尝试构建一个发送和接收来自网站的响应的应用程序.

我在Stack Overflow上阅读的解决方案都没有解决我的问题,所以我认为我的代码可以使用优化.

我有以下主题:

void DomainThreadNamecheapStart()
{
    while (stop == false)
    {
        foreach (string FromDomainList in DomainList.Lines)
        {
            if (FromDomainList.Length > 1)
            {
                // I removed my api parameters from the string
                string namecheapapi = "https://api.namecheap.com/foo" + FromDomainList + "bar";

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(namecheapapi);
                request.Proxy = null;
                request.ServicePoint.Expect100Continue = false;

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream());

                status.Text = FromDomainList + "\n" + sr.ReadToEnd();

                sr.Close();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

单击按钮时会调用此线程:

private void button2_Click(object sender, EventArgs e)
{
    stop = false;
    Thread DomainThread = new Thread(new ThreadStart(DomainThreadNamecheapStart));
    DomainThread.Start();
}
Run Code Online (Sandbox Code Playgroud)

我只使用上面的代码在10秒内收到大约12个响应.当我尝试在JavaScript中使用简单的IFrame进行相同的请求时,它的速度提高了两倍多.浏览器不使用多个线程进行连接,它等待一个完成然后启动新线程.

我尝试过设置request.Proxy = null;,但影响可以忽略不计.

我注意到它HTTPS比它慢2-3倍HTTP.不幸的是,我必须使用HTTPS.有什么办法可以让它更快吗?

Ono*_*dai 5

我的赌注是你指出的方面 - HTTPS协议.

客户端(浏览器)和服务器之间针对纯HTTP协议的迭代非常简单:询问信息,获取信息.如果1.0,关闭连接; 如果1.1,它可以保持活着以便重复使用.(查看图片1了解详情.)

但是,当您执行HTTPS请求时,初始协议开销很大(图2); 但是,一旦完成初始协商,就会发生一些对称加密,不需要进一步的证书协商,从而加快了数据传输速度.

我认为问题是,如果您销毁HTTPWebRequest对象并创建一个新对象,则会再次发生完整的HTTPS交换,从而减慢您的迭代速度.(HTTPS + HTTP 1.1 Keepalive应该可以.)

所以,建议:仅切换到HTTP,或重用连接对象.

我希望它适合你.=)

(1)HTTP协议握手和响应 HTTP协议握手和响应

(2)初始HTTPS协议握手 在此输入图像描述