为什么处理排序数组要比未排序数组慢?
我有500000个随机生成的Tuple<long,long,string>对象的列表,在这些对象上执行简单的“之间”搜索: var data = new List<Tuple<long,long,string>>(500000); ... var cnt = data.Count(t => t.Item1 <= x && t.Item2 >= x); 当我生成随机数组并为100个随机生成的值运行搜索时x,搜索将在大约四秒钟内完成。知道排序确实会对搜索产生很大的影响,但是,我决定在运行100次搜索之前先对数据进行排序Item1,然后再按,再按Item2,最后按Item3- 进行排序。由于分支预测,我希望排序后的版本执行得更快:我的想法是,一旦到达Item1 == x,所有进一步的检查t.Item1 <= x都会正确地预测分支为“ no take”,从而加快分支的尾部。搜索。令我惊讶的是,在排序数组上进行搜索的时间是原来的两倍! 我尝试切换实验顺序,并为随机数生成器使用了不同的种子,但是效果是一样的:在未排序的数组中搜索的速度几乎是在同一数组中搜索速度的两倍,但是排序! 有谁能很好地解释这种奇怪的影响?我测试的源代码如下;我正在使用.NET 4.0。 private const int TotalCount = 500000; private const int TotalQueries = 100; private static long NextLong(Random r) { var data …