我已經使用.Net 3.5和VS 2008超過一個月。像大多數.Net開發者一樣,我已經從.Net 1.0 & 2.0和VS 2005的多年經驗發展而來。就在最近,我發現了LINQ和Lambda表達式的簡單性和強大性,正如我最近的問題,如Find an item in list by LINQ,Convert or map a class instance to a list of another one by using Lambda or LINQ和Convert or map a list of class to another list of class by using Lambda or LINQ 。.NET中LINQ和Lambda表達式的效率和性能如何?
我承認Lambda和LINQ更加簡單易讀而且他們似乎非常強大。在幕後,.Net編譯器必須生成大量代碼才能實現這些功能。因此,我有點猶豫是否改用新的語法,因爲我已經知道實現相同結果的「舊」方法。
我的問題是關於Lambda和LINQ的效率和性能。也許Lambda表達式大多是內聯函數,在這種情況下,我猜Lambda應該沒問題。那麼LINQ怎麼樣?
讓我們只討論LINQ到對象LINQ到SQL(LINQ到SQL)。任何意見,比較和經驗?
這個例子真的不是一個好的測試。首先,他正在比較一個單獨的反向迭代+刪除,以雙重迭代+列表創建+刪除。其次,爲什麼要刪除,而不是*選擇你想要的值*?這種使用LINQ的方法甚至比reverse-for + delete更快。第三,他沒有考慮到JIT,兩次運行我的測試表明,第二次LINQ方法(令人驚訝地足夠)快100倍。我的發現:http://img188.imageshack.us/img188/4408/linq.png 其中「愚蠢的LINQ」是他的雙重迭代+創建+刪除的方法。 – JulianR 2009-07-25 22:18:49
跟進:該測試不是對LINQ與「傳統構造」的測試,而是對有效代碼與低效代碼的測試。例如,列表 .RemoveAll(匹配匹配)方法比反向迭代+刪除方法快多倍,而且肯定比自己寫這種有效的方法要漂亮多了!因此,我認爲您的意見不要使用基於效率假設的方法,這種方法被證明是錯誤的(「優雅結構很慢」),但是基於正確性。 –
JulianR
2009-07-25 22:53:23