我想使用httpwebrequest
訪問Web服務器,並從給定範圍的頁面中獲取數千條記錄。每擊中一個網頁就會獲取15條記錄,並且網絡服務器上幾乎有8到10000個頁面。這意味着服務器總共有120000次點擊!如果使用單個進程輕鬆完成,任務可能非常耗時。因此,多線程是想到的即時解決方案。使用多個線程來實現從Web服務器進行高效搜索
目前,我創建了一個用於搜索目的的工作者類,該工作者類將產生5個子工作者(線程)來在給定範圍內進行搜索。但是,由於我的線程新手能力,我無法使其工作,因爲我無法同步並使它們一起工作。我知道在.NET代表,行動,事件,而是使其與螺紋越來越confusing..This工作是我使用的代碼:
public void Start()
{
this.totalRangePerThread = ((this.endRange - this.startRange)/this.subWorkerThreads.Length);
for (int i = 0; i < this.subWorkerThreads.Length; ++i)
{
//theThreads[counter] = new Thread(new ThreadStart(MethodName));
this.subWorkerThreads[i] = new Thread(() => searchItem(this.startRange, this.totalRangePerThread));
//this.subWorkerThreads[i].Start();
this.startRange = this.startRange + this.totalRangePerThread;
}
for (int threadIndex = 0; threadIndex < this.subWorkerThreads.Length; ++threadIndex)
this.subWorkerThreads[threadIndex].Start();
}
的searchItem方法:
public void searchItem(int start, int pagesToSearchPerThread)
{
for (int count = 0; count < pagesToSearchPerThread; ++count)
{
//searching routine here
}
}
問題存在於線程的共享變量之間,任何人都可以引導我如何使它成爲一個線程安全的過程?
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2013-03-22 18:46:42
@JohnSaunders下次會小心..謝謝 – faizanjehangir 2013-03-22 18:49:57
@faizanjehangir - 您是否考慮過使用提供FTS功能的數據庫?如果您正在手動執行操作,這對DDOS非常敏感。 – tjameson 2013-03-22 18:53:12