我有Webcrawles在C#中編寫,它使用多線程。現在它可以下載和解析約1000鏈接/分鐘,但是當我運行前。 3個實例同時每個實例可以達到1000個鏈接/分鐘,所以我有3000個鏈接/分鐘。一個實例使用高達2%的CPU,100MB RAM和1%的網絡速度。現在我想知道當我有可用的資源(cpu,ram,network)時,一個實例可能達到3000個鏈接/分鐘或更多?我的代碼c#Webcrawler優化
結構:
ThreadSafeFileBuffer<string> successWriter = new ThreadSafeFileBuffer<string>("ok.txt");
IEnumerable<string> lines = File.ReadLines("urls.txt");
var options = new ParallelOptions
{
CancellationToken = _cts.Token,
MaxDegreeOfParallelism = 500
};
Parallel.ForEach(lines, options, (line, loopState, idx) =>
{
var crawler = new Crawler(line);
var result = crawler.Go(); //download,parse
successWriter.AddResult(result);
}
我的Windows 7,CPU i7,16GB內存,SSD硬盤
請注意,HEAD請求方法比GET方法快。適當時,您可以使用HEAD而不是GET。 – mecek
@Mecek:HEAD確實比GET快,但通常不會太多。它取決於數據的大小。許多請求的主要部分不是傳輸數據的時間,而是請求和響應之間的延遲。另外,令人驚訝的數量的服務器爲HEAD請求返回404,或者返回與GET返回的頭不同的頭。當你添加正確處理404s的時間時,它幾乎成了一次洗滌。您最好始終使用GET,除非您知道對HEAD正確響應的那些網站。 –