2

我需要開發一個.NET應用程序,它非常類似於網絡蜘蛛/爬行器。從網站獲取數據,處理數據,將數據保存在數據庫中併發送電子郵件。如何構建一個.NET應用程序來同時和獨立地執行多次相同的任務?

我想一次處理儘可能多的網站作爲機器可以(在合理範圍內)。每個過程都是相互獨立的。我將使用一些第三方服務器組件,如Chilkat Software。只使用一臺計算機。從Windows 7 64位開始,然後轉到Windows Server。

我應該使用哪種架構或設計來處理我提到的要求?運行應用程序的幾個實例(最簡單的方法)?使用Windows WorkFlow Foundation(從未使用過)?某種並行處理? ..? 指向遵循建議設計的示例應用程序的指針是一個優點。

回答

0

我建議使用System.Threading.Tasks library這樣的東西。

那麼你可以做這樣的事情在你的應用程序:

foreach(var input in listToProcess) 
{ 
    Task.Factory.StartNew(() => ProcessInput(input)); 
} 

private static void ProcessInput(Foo myInput) // for example, this might be a url in your case 
{ 
    // your specific processing here: get data from site, process, save, email 
} 
2

可以使用流水線結構:爬 - >程序 - >保存到數據庫 - >電子郵件;應該使用線程安全隊列來連接不同的階段;每個階段可以單獨設置爲使用N個線程。然後在生產環境中,衡量和調整每個階段可以使用的線程數量,以便在大多數時間內沒有階段等待其他階段提供/使用數據。

請注意,還有很多其他因素可以調整以獲得最佳效果。例如:假設您的數據庫每秒最多可以處理一次保存,但數據庫之前的管道可以很容易地每秒生成10個頁面,在這種情況下,您很多人希望將數據庫和進程之間的隊列大小限制在一個稍微小一點的數目。

調整所有這些因素,並觀察它們如何與對方互動是興趣和樂趣。與簡單的多線程/處理方法相比,您會驚訝於機器的性能。

0

工作流程絕對可以用來做這種事情。跟蹤功能具有一些顯着的優勢,可以爲您提供發生的所有事件的詳細日誌,並且可以輕鬆處理多個異步任務。

鑑於您從未使用過它,您的負面影響將會提高。我們確實提供實驗室的幫助,讓您快速上手。

在我們的Beginners Guide To Workflow頁面上查看實驗室手中的頁面

相關問題