需求:有個檔案存放一堆 key word,要拿到搜尋引擎查詢相關結果,回存另一個檔案。
這是最後結果:
static void Main(string[] args)
{
if (File.Exists(asinPath))
{
using (StreamReader sr = new StreamReader(asinPath))
{
var asinList = sr.ReadToEnd()
.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
.Where(asin => asin.Length == 10);
Parallel.For(0, asinList.Count(), new ParallelOptions { MaxDegreeOfParallelism = 10 }, (idx) =>
{
QueryAsin(asinList.ElementAt(idx));
});
}
}
}
透過網路查詢,瓶頸一定是網路速度,開多執行緒是考慮作法(傻傻的,一開始還沒想到…
然後寫入 log檔,要用 lock (global_object){ } 包住開檔、寫檔的動作。
以下是一開始笨笨的作法……
static void Main(string[] args)
{
if (File.Exists(asinPath))
{
using (StreamReader sr = new StreamReader(asinPath))
{
do
{
string asin = sr.ReadLine();
if (asin.Length != 10)
{
continue;
}
QueryAsin(asin);
}
while (!sr.EndOfStream);
}
}
}
然後中間想到多執行緒,但沒用過幾次(遮臉),中間花了點時間試 Thread, ThreadPool…
花時間不打緊,試半天試不出來才讓人腦羞啊啊啊 <囧>
(想了下,主要是卡在一開始是一行一行讀資料吧…
後來想到在黑暗執行緒看過多執行緒寫法範例,然後記憶都回來了一部份,.Net某次改版曾主打超簡便的平行處理……結束這回合。