2011-08-09 29 views
0

我目前面臨一個奇怪的問題。我測試網站的響應時間,但是當該方法在第三時間循環(定時的連接)它掛起:程序在第三次迭代時掛起(HTTPWebRequest)C#

internal class Program 
{ 

     Console.ReadLine(); 

     loop(); 
    } 
} 

它掛起之前的輸出是:「HTTP響應定時器」,所以我假定這與正在運行的實例有關。

+0

考慮爲你的循環使用'for'語句,否則如果循環次數足夠多,你最終會得到一個'StackOverflowException'。你正在遞歸地調用你的函數。 –

回答

5

您必須關閉響應。否則,你會達到最大的開放連接。

使用using語句,這是最簡單的方法來關閉和處置的響應:

using(HttpWebResponse response = (HttpWebResponse)request.GetResponse()){ 

    // .. here some action if any 
} 
2

你不處置的響應,這意味着它掛到從之前的請求的連接。然後,新的要求正在等待從池中獲取連接,並阻止由於舊響應仍然是「擁有」的連接只需更改您的代碼:

// You weren't really using the HttpWebResponse class anyway, so why cast? 
using (var response = request.GetResponse()) 
{ 
} 

真的意味着雖然遞歸?你爲什麼不循環使用:

while(true) 
{ 
    GetResponse(); 
} 

或類似的東西?

相關問題