LINQ vs キーブレイク パフォーマンス勝負 #dotnetjp #adcjcs by @masaru_b_cl

はじめに

このエントリは「C# Advent Calendar 2013 – Adventar」への参加エントリです。

前日は@yone64さんの「WindowsストアアプリでReflection | 泥庭」でした。

 

LINQ vs キーブレイク

もはや空気のようになったLINQですが、いまだに活用されていない現場を見ることもあり、非常に残念に思います。

そこで、本エントリではいわゆる「キーブレイク処理」をLINQで置き換え、性能にほとんど差がないことを示し、LINQ導入の一助としたいと思います。

 

テーマ

取引先と商品ごとに単価と数量を持つ売上データを、明細、小計(商品ごと)、大計(取引先ごと)、総計を出すプログラムを考えます。

元データはこんな感じで生成します。

 

キーブレイク

こんな感じで、オーソドックスなキーブレイク処理を行います。

#久々にキーブレイク処理とか書いたf(^^;

 

LINQ

LINQ側はこんな感じ。取引先でグルーピングしたものをぶん回し、内部でさらに商品でグルーピングしています。もっと良い書き方があればぜひ教えていただきたいところ。

 

結果

それぞれ10回ぶん回して、処理時間の平均をとってみました。その結果がこちら(単位msec)。

image

 

多少キーブレイクのほうが早い感じになってますが、誤差の範囲といってもいいんじゃないでしょうか。現に何度かやったらLINQの方がごくわずかに早いこともありました。

つまり、今回のケースではLINQを使ってもパフォーマンス上不利になることはないということです。これは、処理自体より、標準出力の方がボトルネックになってるからかなーとも思いますが、キーブレイク処理するようなときは大体帳票出したりするときなので、CPUがいくら頑張ってもI/Oが遅いはずであることを考えると、LINQを使わない理由はないかなと。コード短くて何やってるかすぐ分かりますし。

 

検証ソース

今回の検証ソースはGistにあげてあります。

 

次は?

MS MVPの@hiroyuki_moriさんです!

デリゲート~ラムダ式の歴史を辿って | もりひろゆきの日々是勉強

広告

LINQ vs キーブレイク パフォーマンス勝負 #dotnetjp #adcjcs by @masaru_b_cl」への2件のフィードバック

  1. ピンバック: デリゲート~ラムダ式の歴史を辿って | もりひろゆきの日々是勉強

  2. ピンバック: 2013年振り返り by @masaru_b_cl | be free

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中