私のアプリのパフォーマンスがひどい理由を少し見てみました。私がしたのはデバッガーを2回一時停止することだけで、それを見つけました。
それが毎回私のコードを実行する実際的な理由はありますか?これを防ぐために私が知っている唯一の方法は、最後にToArray()を追加することです。すべてのコードを修正して、配列が返されることを確認する必要があると思いますか?
オンラインデモhttp://ideone.com/EUfJN
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Test
{
static void Main()
{
string[] test = new string[] { "a", "sdj", "bb", "d444"};
var expensivePrint = false;
IEnumerable<int> ls = test.Select(s => { if (expensivePrint) { Console.WriteLine("Doing expensive math"); } return s.Length; });
expensivePrint = true;
foreach (var v in ls)
{
Console.WriteLine(v);
}
Console.WriteLine("If you dont think it does it everytime, lets try it again");
foreach (var v in ls)
{
Console.WriteLine(v);
}
}
}
出力
Doing expensive math
1
Doing expensive math
3
Doing expensive math
2
Doing expensive math
4
If you dont think it does it everytime, lets try it again
Doing expensive math
1
Doing expensive math
3
Doing expensive math
2
Doing expensive math
4