ソートされた配列の処理がソートされていない配列よりも遅いのはなぜですか?
Tuple<long,long,string>単純な「間」の検索を実行する500000個のランダムに生成されたオブジェクトのリストがあります。 var data = new List<Tuple<long,long,string>>(500000); ... var cnt = data.Count(t => t.Item1 <= x && t.Item2 >= x); ランダムな配列を生成し、ランダムに生成された100個のの値に対して検索を実行すると、検索xは約4秒で完了します。並べ替えが検索に与える大きな驚異を知っていたため、100回の検索を実行する前に、データを最初にItem1、次にItem2、最後にの順に並べ替えることにしましたItem3。分岐予測のため、ソートされたバージョンのパフォーマンスが少し速くなることを期待していました:のポイントに到達するとItem1 == x、のすべてのチェックでt.Item1 <= x分岐が「ノーテイク」と正しく予測され、のテール部分が高速になると考えていました探す。驚いたことに、ソートされた配列の検索には2倍の時間がかかりました。 実験を実行する順序を切り替えてみて、乱数ジェネレーターに別のシードを使用しましたが、効果は同じです。並べ替えられていない配列での検索は、同じ配列での検索のほぼ2倍の速度で実行されましたが、ソートされました! 誰かがこの奇妙な効果をうまく説明していますか?私のテストのソースコードは次のとおりです。.NET 4.0を使用しています。 private const int TotalCount = 500000; private const int TotalQueries = 100; private static long NextLong(Random r) { var data = new byte[8]; …