public Int64 ReturnDifferenceA()
{
User[] arrayList;
Int64 firstTicks;
IList<User> userList;
Int64 secondTicks;
System.Diagnostics.Stopwatch watch;
userList = Enumerable
.Range(0, 1000)
.Select(currentItem => new User()).ToList();
arrayList = userList.ToArray();
watch = new Stopwatch();
watch.Start();
for (Int32 loopCounter = 0; loopCounter < arrayList.Count(); loopCounter++)
{
DoThings(arrayList[loopCounter]);
}
watch.Stop();
firstTicks = watch.ElapsedTicks;
watch.Reset();
watch.Start();
for (Int32 loopCounter = 0; loopCounter < arrayList.Count(); loopCounter++)
{
DoThings(arrayList[loopCounter]);
}
watch.Stop();
secondTicks = watch.ElapsedTicks;
return firstTicks - secondTicks;
}
ご覧のとおり、これは非常に簡単です。ユーザーのリストを作成し、配列に強制し、ウォッチを開始し、リストをループしてメソッドを呼び出し、ウォッチを停止します。繰り返す。1回目と2回目の差額を返して終了。
今、私はこれらで呼び出しています:
differenceList = Enumerable
.Range(0, 50)
.Select(currentItem => ReturnDifferenceA()).ToList();
average = differenceList.Average();
differenceListA = Enumerable
.Range(0, 50)
.Select(currentItem => ReturnDifferenceA()).ToList();
averageA = differenceListA.Average();
differenceListB = Enumerable
.Range(0, 50)
.Select(currentItem => ReturnDifferenceA()).ToList();
averageB = differenceListB.Average();
ここで面白いのは、すべての平均が 150k から 300k ティックの範囲で比較的大きくプラスになっていることです。
私が得られないのは、同じリストを同じ方法で同じ方法で調べているにもかかわらず、そのような違いがあるということです。ある種のキャッシングが行われていますか?
もう 1 つの興味深い点は、最初のストップ ウォッチ セクションの前にリストを反復すると、平均が約 5k 程度になることです。