[問題] httpwebrequest請求逾時

作者: unstoppable (BEN)   2015-08-22 05:49:32
目前的專案是需要對多個網站抓數據下來
有將httpwebrequest包成一個方法,並使用多線程去跑
方法最後有將request abort以及response close還有設定為null
方法最前有GC.Collect();
request的keep-alive設定為false
ServicePointManager.DefaultConnectionLimit設定為512
十多個網站中,有兩個常會出現逾時,其他網站不會
軟體單獨對這兩個網站取數據不會出現
同時對十多個網站抓取數據才會發生
每個網站各自的抓取間隔皆為2秒
原本想說是不是網站本身問題,但是不全部一起抓就不會發生逾時
想請問板上前輩,還有什麼問題是可能造成這樣的狀況發生?
感謝
作者: fo40225   2015-08-22 08:24:00
有完整的程式碼嗎? 這樣比較好找問題然後 不要呼叫GC.Collect() 你呼叫這個 他要把所有的線程掛起 很傷效能也不要把物件設為null 這樣會讓物件被GC的時間延後.net的最佳記憶體管理方式就是有IDisposable時用using然後其他的不要管 把物件設為null在C++才是呼叫解構子C#中沒有意義如果你是.net4.5以上 你可以試試用HttpClient
作者: fatrabitree (胖兔子)   2015-08-22 15:24:00
C++設為null也沒有呼叫解構子就是...
作者: fo40225   2015-08-22 21:08:00
那就是我誤解了 抱歉誤導了backgroundworker是設計拿來CPU-bound 別拿來IO試試 (HttpWebResponse)await req.GetResponseAsync();有沒有可能是頻寬吃緊 導致60秒載不完?不然就是線程太多 來不及反應

Links booklink

Contact Us: admin [ a t ] ucptt.com