2013-02-06 25 views
0

我有一些HttpWebRequest類的邏輯問題。如何使用HttpWebRequest類獲得真正的多響應

我使用HttpWebRequest類從System.Net命名空間,我這樣做的時候:

while(true) 
{ 
    HttpWebRequest request = WebRequest.Create("http://somesite.com/") as HttpWebRequest; 
    HttpWebResponse responce = request.GetResponse() as HttpWebResponse; 
} 

我接一個超齡1秒間隔得到響應的一個,但我覺得我的互聯網連接可以工作得更快因爲接收到的數據非常小。然後我試試這個:

while(true) 
{ 
    HttpWebRequest request = WebRequest.Create("http://google.com/") as HttpWebRequest; 
    HttpWebResponse response = request.BeginGetResponse(EndReceive, obj); 
} 

internal void EndReceive(IAsyncResult ar) 
{ 
    obj.Response = obj.Request.EndGetResponse(ar) as HttpWebResponse; 
} 

而且我得到非常小的提速,東西約10-30%,但我用異步請求,我向服務器發送請求5,而不是一個,爲何速度沒有被提高超過100%? 它的確定,如果服務器不能在同一時間從一個IP處理多個請求......但是,當我運行代碼,10控制檯應用程序:

void SendRequest() 
{ 
    HttpWebRequest request = WebRequest.Create("http://google.com/") as HttpWebRequest; 
    HttpWebResponse responce = request.BeginGetResponse(EndReceive, obj); 
} 

void EndReceive(IAsyncResult ar) 
{ 
    obj.Response = obj.Request.EndGetResponse(ar) as HttpWebResponse; 
} 

我得到的速度增加像4-8倍,是HttpWebRequest類的問題?爲什麼我不能用一個應用程序獲得這樣的速度,但有很多異步請求?

回答

0

我強烈懷疑你基本上被內置連接池限制,這將限制單個進程(或可能AppDomain)對給定主機發出的請求數。如果要更改可以對單個主機發出的併發請求數,請在app.config中使用<connectionManagement>元素。

順便說一句,當你使用響應時,你應該有一個using聲明,否則你不能正確地處理它......這可能會導致連接池本身的可怕問題。

相關問題