Почему такая большая разница во времени при поиске элемента с более высоким индексом в ConcurrentBag?

Я искал разные времена для поиска определенного элемента в ConcurrentBag с использованием .ElementAt () и обнаружил эту странную разницу во времени между поиском элемента с индексом 950 000 и поиском элемента с индексом 1 000 000.

Время, необходимое для поиска элемента на 950 000-м месте, заняло от 62 до 68 миллисекунд.
Время, необходимое для поиска элемента на 1 000 000-м месте, заняло от 20 до 23 миллисекунд.

И я не уверен, почему это так.
Код выглядит так:

ConcurrentBag<int?> concurrentBag = new ConcurrentBag<int?>();

int n = 1000000;
int? n1 = n;
for (int i = 0; i <= n1; i++)
{
     concurrentBag.Add(i);
}

DateTime before = DateTime.Now;
int? a = concurrentBag.ElementAt(n);
DateTime after = DateTime.Now;
TimeSpan time = after - before;

Console.WriteLine(time.TotalMilliseconds);

Всего 1 ответ


  1. Вы не должны использовать библиотеку DateTime для проверки точности и тестов на этом небольшом интервале. Когда я запускаю этот код, я получаю от 11 мс до 70 мс каждый раз. Это не будет последовательным.
  2. Вы делаете один единственный поиск. Ваша машина может выполнять любое количество других операций, которые могут повлиять на скорость одного поиска. Вы должны выполнить этот код много тысяч раз и получить среднее значение, чтобы иметь какие-либо действительные данные.

Есть идеи?

10000