LINQ 查詢定義時不立即計算,而是在列舉結果(如 foreach)時逐元素執行。這避免了一次載入整個資料源,大幅改善大數據場景效能。
static void Main()
{
int[] collection = { 10, 11, 12, 13, 14 };
Console.WriteLine("Begin query:" + DateTime.Now);
var result = from i in collection select DoubleInt(i);
Console.WriteLine("End query & Begin output:" + DateTime.Now);
foreach (var i in result)
{
Console.WriteLine("Result:" + i + " Time:" + DateTime.Now);
}
Console.WriteLine("End output:" + DateTime.Now);
}
static int DoubleInt(int i)
{
Console.WriteLine("The parameter is:" + i);
Thread.Sleep(1000);
return i * 2;
}
/* 輸出:
Begin query: 22:41:50
End query & Begin output: 22:41:50 <-- 查詢定義幾乎零耗時
The parameter is:10
Result:20 Time:22:41:51 <-- 每個元素間隔 1 秒產出
The parameter is:11
Result:22 Time:22:41:52
...
End output: 22:41:55
*/
var result = ...)瞬間完成,無實際計算。foreach 迴圈中,逐元素、按需執行。這證明 LINQ 採用「拉取式」延遲執行模型,而非「推送式」立即計算。