私は、特定の属性を含むいくつかのxmlのメモリ内の要素の数を検出する、怠惰なlinqクエリを持っています。私は、XMLの長さを変えてそのクエリを列挙するのにかかる時間の長さを評価したいと思います。IEnumerable <T>評価時間の測定方法はありますか?
これを行うために、まず、すべてのアイテムの列挙を引き起こすことがわかっているので、私はまず.ToList()を呼び出すことを検討しました。しかし、これは、すべての項目をある構造から別の構造に移動して.Count()への呼び出しに切り替えるメモリ操作が存在するため、完全な評価時間ではない可能性があると判断しました。
IEnumerable<XMLNode> nodes = "<Some Linq>"
var watch = new Stopwatch();
watch.Restart();
var test = nodes.Count();
watch.Stop();
Console.WriteLine("Enumeration Time: " + watch.ElapsedMilliseconds);
最初の質問は、これがEnumerableを評価するのにかかる時間を計算する最もよい方法でしょうか?
第2の質問は、実際の評価時間Count()またはToList()をより代表するものでしょうか?
コードの結果がいくつかありますが、反復の間にxmlの新しい部分が追加されます。これは、検索されるxmlが毎回同じ量だけ増加することを意味します。
Resuts
Enumeration Time: 0 (ms)
Enumeration Time: 0 (ms)
Enumeration Time: 1 (ms)
Enumeration Time: 1 (ms)
Enumeration Time: 2 (ms)
Enumeration Time: 2 (ms)
Enumeration Time: 2 (ms)
Enumeration Time: 3 (ms)
Enumeration Time: 3 (ms)
Enumeration Time: 4 (ms)
Enumeration Time: 4 (ms)
Enumeration Time: 5 (ms)
Enumeration Time: 6 (ms)
Enumeration Time: 6 (ms)
Enumeration Time: 8 (ms)
Enumeration Time: 6 (ms)
Enumeration Time: 15 (ms)
Enumeration Time: 8 (ms)
Enumeration Time: 8 (ms)
Enumeration Time: 9 (ms)
Enumeration Time: 8 (ms)
Enumeration Time: 9 (ms)
Enumeration Time: 10 (ms)
Enumeration Time: 10 (ms)
Enumeration Time: 10 (ms)
Enumeration Time: 27 (ms)
Enumeration Time: 12 (ms)
Enumeration Time: 18 (ms)
Enumeration Time: 20 (ms)
Resuts(.Count()から)(.ToListから())
Enumeration Time: 1 (ms)
Enumeration Time: 1 (ms)
Enumeration Time: 1 (ms)
Enumeration Time: 2 (ms)
Enumeration Time: 2 (ms)
Enumeration Time: 3 (ms)
Enumeration Time: 3 (ms)
Enumeration Time: 4 (ms)
Enumeration Time: 4 (ms)
Enumeration Time: 5 (ms)
Enumeration Time: 5 (ms)
Enumeration Time: 9 (ms)
Enumeration Time: 14 (ms)
Enumeration Time: 12 (ms)
Enumeration Time: 10 (ms)
Enumeration Time: 8 (ms)
Enumeration Time: 9 (ms)
Enumeration Time: 10 (ms)
Enumeration Time: 13 (ms)
Enumeration Time: 12 (ms)
Enumeration Time: 12 (ms)
Enumeration Time: 16 (ms)
Enumeration Time: 21 (ms)
Enumeration Time: 18 (ms)
Enumeration Time: 15 (ms)
Enumeration Time: 15 (ms)
Enumeration Time: 23 (ms)
Enumeration Time: 15 (ms)
Enumeration Time: 38 (ms)
foreachループを使用してLINQ結果を列挙することができます。これは最小限のオーバーヘッドがあるはずです(常にオーバーヘッドがあります)。 – martinstoeckli