Dlinqのパフォーマンスについて

かねてから.NET3.0のlinqって本当に使い物になるのか?と思っていたのだが、
Rico Marianiさんが、調べてくれていた。
http://blogs.msdn.com/ricom/archive/2007/06/22/dlinq-linq-to-sql-performance-part-1.aspx
http://blogs.msdn.com/ricom/archive/2007/06/25/dlinq-linq-to-sql-performance-part-2.aspx
(Part1は、コードが間違ってexception起きてるから遅いんじゃないか?って思ったんでres書いたが、Part2を見ると、どうもそうじゃないらしい...)
遅い内訳は以下の通り...

Category Time
Total Benchmark 100.00%
Query Build 24.40%
Query Enumeration 74.55%
Dispatch Glue 7.34%
Jitting Costs 18.07%
Data Reading 49.14%
Misc 1.06%

うーむ...whereもorder byもなしの単純全件selectでこんなにcostかかってるのか...
つまり処理スピードが速い順に並べると、
1.SQL文でやる (select count(*) 件数,sum(OrderID) OrderID合計 from Orders)
2.DataReaderを使ってループ(SqlDataReader dr = cmd.ExecuteReader())
3.Dlinq
(Rico MarianiさんのBlogでは1のケースは省かれている)
DataReaderで500明細で1sec,Dlinqで500明細で8sec,SQLでやると多分一瞬。
今後のパフォーマンス改善に期待...

MEMO(61880)

    • 追記--

if (!dr.IsDBNull(2))はやっぱりmistakeだったらしい。Mr.Rico,thanks!
benchmark結果もチェックしてくれてて、正しいコードで実行されてるということ。
(6/27 18:00JST確認)

    • 追記2--

Ricoさんは、MSDNの中のarticle,"Improving .NET Application Performance and Scalability"などを書いている人だったりしますので、とっても有名な人だということを先ほど知りました...
(Performance Architect in the Developer Division at Microsoft Corporation だそうです)
http://msdn2.microsoft.com/en-us/library/ms979190.aspx