私はLINQが大好きです。今日の別の投稿を読んだとき、「スライスしたパン以来最高のものだ」と私は完全に同意します. しかし、私が働いている会社では、他の誰もがLINQを嫌っているようです。
数週間前、私は初めて ReSharper を使用していました。コードを書いているときに、ReSharper が突然、foreach ループを LINQ 式に変換できると言ってきました。これは私にとって魔法のようで、同僚に見せました。驚いたことに、彼は次のように述べています。その方が早いでしょう!」
では、LINQ-to-Objects は本当に遅いのでしょうか? 私は自分自身を試してみました。次のサンプルを数回実行すると、Elapsed Ticks が 350 前後になります。
Stopwatch sw = new Stopwatch();
List<Person> personList = new List<Person>();
for (int i = 0; i < 5000; i++)
{
Person p = new Person() {ID = i};
personList.Add(p);
}
sw.Start();
Person searchPerson = null;
foreach (Person person in personList)
{
if (person.ID == 4321)
{
searchPerson = person;
break;
}
}
sw.Stop();
Console.WriteLine(sw.ElapsedTicks);
ループを LINQ-Query に変更すると (Resharper がそれを行います)、約 900 の ElapsedTicks が得られます。ループの場合の 2 倍以上です。
Person searchPerson = personList.FirstOrDefault(person => person.ID == 4321);
LINQは確かに遅いようで、頻繁に使用すると問題になる可能性があります。そして、当社には多くのデータがあります。では、LINQ を避けるのは正しい決断でしょうか、それとも何か間違ったことをしているのでしょうか?