orizuru

つながる.見える.わかる IoTソリュ-ション

【C#】【Linq】データ取得速度比較

約 3 分
【C#】【Linq】データ取得速度比較

お久しぶりです、エンジニアのMasashiです。

今回はC#を扱う人たちの味方、Linqの疑問について検証を行ってみました。
C#を扱う人たちならば必ず使用するLinqですが、実際データ取得速度はどの程度のものなのでしょうか?
上記について検証を行ってみたいと思います。

測定までの流れ

今回測定を行うのは、Listに格納されているデータから該当のデータを取得する際にかかった時間になります。
データの取得方法については、Linqを使用する方法と使用しない方法での速度比較になります。

測定環境

  • Visual Studio 2015

対象データ

  • データ数:20,000,000
  • Listの中身:0~10,000までの乱数

測定対象

  • Loopで判定しながら取得
  • Linqを使用
  • FindAllメソッドを使用

テストコード

測定結果

10回試行した結果の平均値が下記になっています。小数点以下は四捨五入しています。

ここをタップして表示Close
計測項目 計測時間(ms)
Loopで判定しながら取得 99
Linqで取得 117
FindAllメソッドで取得 89

上記からListで該当のデータ取得にはFindAllメソッドが一番時間が速い結果になりました。
Linqは処理速度が遅いという記事がよく見られますが、評判通りの結果となりました。
Loopで判定しながら取得する結果は、自分が思っていたよりも短い時間で処理可能であることがわかりました。

今回計測条件を揃えるために、Linq/FindAllメソッドでのデータ取得では、【ToList()】の部分でListに変換後、格納しています。
しかし、Linq/FindAllメソッドの結果をListに変換せず取得すると、取得速度は非常に速くなります。
どれぐらい速いかというとミリ秒では測れない速度結果になります。
Listに変換する処理が非常に時間のかかる処理であることが上記からわかります。

まとめ

特定データの取得速度という面では、今回大きな速度差を見つけることはできませんでした。
実施パターンの中では、Linqが処理速度は一番遅い形になりますが、テストデータの件数から比較すると気になるほどの差ではないと判断できます。
上記処理時間を気にするよりも、Linqを使用した際のメリットである遅延評価とコードの簡潔さからデータ取得方法は、Linqに軍配が上がると思います。
Linqは非常にいろいろな処理が行える便利な機能です。
C#を使ったことがない方もこれを機にC#そして、Linqに触れてみていただければ嬉しいです。

About The Author

エンジニアMasashi
C#を用いた業務系アプリの製造に従事。

Leave A Reply

*
*
* (公開されません)