[英]How do I increase the performance of HttpWebResponse on HTTPS Requests?
[英]How do I increase the performance of HttpWebResponse?
我正在嘗試構建一個發送和接收來自網站的響應的應用程序。
我在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();
}
}
}
}
單擊按鈕時會調用此線程:
private void button2_Click(object sender, EventArgs e)
{
stop = false;
Thread DomainThread = new Thread(new ThreadStart(DomainThreadNamecheapStart));
DomainThread.Start();
}
我只使用上面的代碼在10秒內收到大約12個響應。 當我嘗試在JavaScript中使用簡單的IFrame進行相同的請求時,它的速度提高了兩倍多。 瀏覽器不使用多個線程進行連接,它等待一個完成然后啟動新線程。
我嘗試設置request.Proxy = null;
,但它的影響可以忽略不計。
我注意到HTTPS
比HTTP
慢2-3倍。 不幸的是,我必須使用HTTPS
。 有什么辦法可以讓它更快嗎?
我的賭注是你指出的方面 - HTTPS協議。
客戶端(瀏覽器)和服務器之間針對純HTTP協議的迭代非常簡單:詢問信息,獲取信息。 如果1.0,關閉連接; 如果1.1,它可以保持活着以便重復使用。 (查看圖片1了解詳情。)
但是,當您執行HTTPS請求時,初始協議開銷很大(圖2); 但是,一旦完成初始協商,就會發生一些對稱加密,不需要進一步的證書協商,從而加快了數據傳輸速度。
我認為問題是,如果您銷毀HTTPWebRequest對象並創建一個新對象,則會再次發生完整的HTTPS交換,從而減慢您的迭代速度。 (HTTPS + HTTP 1.1 Keepalive應該可以。)
所以,建議:僅切換到HTTP,或重用連接對象。
我希望它適合你。 =)
(1)HTTP協議握手和響應
(2)初始HTTPS協議握手
嘗試修改System.Net.ServicePointManager.DefaultConnectionLimit值(默認值為2)。
其他參考 ( 性能問題部分)。
嘗試這些,它幫助我提高了性能,
ServicePointManager.Expect100Continue = false;
ServicePointManager.DefaultConnectionLimit = 200;
ServicePointManager.MaxServicePointIdleTime = 2000;
ServicePointManager.SetTcpKeepAlive(false, 0, 0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.