Почему такая большая разница во времени при поиске элемента с более высоким индексом в ConcurrentBag? - PullRequest
0 голосов
/ 10 февраля 2020

Я в разное время искал поиск указанного элемента c в ConcurrentBag с использованием .ElementAt () и обнаружил эту странную разницу во времени между поиском элемента с индексом 950 000 и поиском элемента с index: 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 Ответ

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