2017-02-04 46 views
1

我需要優化我的代碼,經過時間爲1秒的響應,經過時間爲ReadToEnd的()它 - 0.5秒,所有其它代碼(完整的Web請求)只需要0.1秒。С#(.NET),如何解決網絡響應性能,過多的經過時間

request2.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

//This 1sec+ 
HttpWebResponse response = (HttpWebResponse)request2.GetResponse(); 
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 

//This 0.5sec+ 
string mem = sr.ReadToEnd(); 
sr.Close(); 

P.S:HTML代碼200K左右+字符,但我只需要4-5。

回答

0

要添加使用usingsetting proxy to null的其他建議的頂部,您可能還想嘗試只讀取特定數量的字符,而不是閱讀所有內容。

var content = new char[10]; 
sr.Read(content, 0, content.Length); 
string contentStr = new String(content); 
2

最有可能的,具有不爲您HttpWebResponse設置代理服務器設置造成的延遲。總是建議設置代理,即使它沒有使用。也可以嘗試使用using子句:

request2.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

request2.Proxy = null; 
using (HttpWebResponse response = (HttpWebResponse)request2.GetResponse()) 
{ 
    StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 
    string mem = sr.ReadToEnd(); 
} 
+1

沒有幫助,同時(1.5-1.7秒) –

0

檢查犯規依賴於其他服務的JS腳本庫等。據我以前在我的項目工作。下載它們並將其移動到你的本地文件夾

2

最初的GetResponse調用生成一個安全協商,獲取和excecute,然後HTTP響應,其前幾個字節包含HTTP響應代碼(200500404等)。

響應的身體可能已經被你的客戶端HTTP緩存接收或仍然正在直播到它 - 你真的不能告訴。第二次調用(readToEnd)讀取接收緩衝區中的所有字節,並等待服務器發送了Http Header中指示的所有字節。

您的代碼不太可能對Web服務調用的執行時間造成任何可觀的成本,並且我看不到任何可能的optmisation步驟 - 您需要確定在沒有您的客戶端代碼的情況下調用需要多長時間。

使用Telerik的提琴手來追蹤目標Web服務調用的字節數,和時間從服務器原料轉移到客戶需要的量 - 通過簡單地調用內提琴手或web瀏覽器的URL做到這一點。這將隔離它的代碼或服務器,還是連接等待時間。

+0

205241(得到)+ 1809(後),2.6秒的網頁瀏覽器,205219 + 1789年,2.1秒在我的客戶。所以字節長度是相同的,但我不需要從第二個響應205k,我需要從整個HTML代碼只有一個數字,它不可能只獲得部分代碼?響應總是採取所有的HTML頁面? –

+0

我想你可能會在這裏錯過一個觀點 - 服務器響應Get調用需要多長時間?這就是爲什麼我推薦Fiddler--它是免費的 - 並且它會告訴你在客戶端收到第一個字節需要多長時間 - 「第一個字節的時間」和「最後一個字節的時間」。您仍不知道數據傳輸需要多長時間,並且服務器需要多長時間創建要發送給您的返回數據。 The Fiddler「第一個字節的時間」是絕對的最低限度,你會得到你的代碼 - 所以知道它的重要性。您可能會發現205k的數據需要一個微不足道的時間。 – PhillipH

相關問題