大家好哪個LINQ表達更快
在按照我的理解代碼
public class Person
{
public string Name { get; set; }
public uint Age { get; set; }
public Person(string name, uint age)
{
Name = name;
Age = age;
}
}
void Main()
{
var data = new List<Person>{ new Person("Bill Gates", 55),
new Person("Steve Ballmer", 54),
new Person("Steve Jobs", 55),
new Person("Scott Gu", 35)};
// 1st approach
data.Where (x => x.Age > 40).ToList().ForEach(x => x.Age++);
// 2nd approach
data.ForEach(x =>
{
if (x.Age > 40)
x.Age++;
});
data.ForEach(x => Console.WriteLine(x));
}
第二個方法應該是更快,因爲它的每個項目,遍歷一次,第一種方法是運行2次:
- 其中子句
- ForEach對where子句中的項目子集。
但內部可能是編譯器會將第一種方法轉換爲第二種方法,它們將具有相同的性能。
任何意見或建議?
我可以做分析一樣的建議,但我想知道是怎麼回事,編譯器級別,如果那些行代碼都是相同的編譯器,或者編譯器會從字面上對待它。
在此先感謝您的幫助。
剖析......做了測量與秒錶,看看什麼是快 – 2011-01-06 18:40:59
你能不只是一次,看看哪個更快? – 2011-01-06 18:41:38
ps。從技術上講,第二種方法(列表中的ForEach)不是Linq,因爲它是List-class上的一個直接方法,它將一個委託作爲參數。 – 2011-01-06 18:42:56