這是在看 LINQ In Action 的時候發現的,查詢了一下,原來這是 C# 2.0 就已經提供的功能.....
用途在於可以用更少的資源(Resource)使用集合(collection)物件!
為何這麼說呢? 以下用一段程式碼來說明:
using System;
using System.Linq;
namespace DeferredQueryExecution
{
class Program
{
static double Square(double n)
{
//每呼叫 Square 就會印出下列訊息
Console.WriteLine("Computing Square(" + n + ")....");
return Math.Pow(n, 2);
}
static void Main(string[] args)
{
int[] numbers = { 1, 2, 3 };
//取得 numbers 陣列中所有元素的平方值並存入 query 集合物件中
var query =
from n in numbers
select Square(n);
//印出 query 集合物件的內容
foreach (var n in query)
Console.WriteLine(n);
Console.ReadLine();
}
}
}
這一段程式碼執行完的結果會是如何呢? 一般來說,應該是以下這樣....
Computing Square(1)....
Computing Square(2)....
Computing Square(3)....
1
4
9
但實際跑出來的結果並非這樣,而是:
Computing Square(1)....
1
Computing Square(2)....
4
Computing Square(3)....
9
結果令人出乎意料吧!
從結果可以看出,.NET compile 在處理集合物件時,並非一次給定完整結果,而是「真的有需要才一個一個慢慢給出」,因此當集合物件的數量龐大時,可以有效降低系統資源的浪費,提升在操作集合物件時的效能。
當然,這跟 LINQ 好像沒啥關係......因此只要了解一下 .NET 有這種機制存在即可囉!
沒有留言:
張貼留言