Я делаю небольшой тест, чтобы что-то проверить. У меня большой массив из 100 миллионов 64-битных целых, я случайным образом выбираю 10 миллионов из них и выполняю несколько операций. Индексы выбираются случайным образом, потому что я стараюсь не допускать кеширования процессора настолько, насколько это возможно, при этом получая точный тест. Первая итерация цикла занимает около 0,3 секунды, а все остальные - только 0,2 секунды. Мое единственное предположение, что части cone [] все еще находятся в кеше, но я думаю, что с массивом такого размера он не сможет хранить так много. Есть еще мысли?
Возможно, проблема с JIT?
static void Main(string[] args)
{
Int64[] cone = new Int64[100000001];
for (int m = 0; m < 20; ++m)
{
int[] num2 = new int[10000001];
Random rand = new Random();
for (int i = 0; i < 10000000; ++i)
{
num2[i] = rand.Next(100000000);
}
DateTime start = DateTime.Now;
for (int i = 0; i < 10000000; ++i)
{
cone[num2[i]] = i;
if (cone[i] > 0) ++cone[i];
}
DateTime finish = DateTime.Now;
TimeSpan elapsed = finish - start;
Console.WriteLine("Took: {0}", elapsed);
Thread.Sleep(100);
}
Console.ReadLine();
}