właśnie patrząc na MSDN documentation for ConcurrentDictionary i widziałem to w „przykład” Kod:.NET Początkowa moc obliczeniowa ConcurrentDictionary dla arbitralnej liczby pierwszej zamiast oczekiwanej w przykładowej dokumentacji MSDN. Czemu?
// We know how many items we want to insert into the ConcurrentDictionary.
// So set the initial capacity to some prime number above that, to ensure that
// the ConcurrentDictionary does not need to be resized while initializing it.
int NUMITEMS = 64;
int initialCapacity = 101;
odsyłającym słownika na przykład MSDN jest inicjowany w następujący sposób:
ConcurrentDictionary<int, int> cd = new ConcurrentDictionary<int, int>(Environment.ProcessorCount * 2, initialCapacity);
for (int i = 0; i < NUMITEMS; i++) cd[i] = i * i;
W przykład, słownik nigdy nie będzie zawierał więcej niż 64 elementy. Dlaczego nie ustawić początkowej pojemności na 64, zamiast na pozornie arbitralną liczbę pierwszą większą niż 64? Komentarz mówi, że ma to zapewnić, że słownik nie będzie wymagał zmiany rozmiaru podczas inicjalizacji, ale dlaczego należy zmienić rozmiar podobnego słownika o wartości initialCapacity = 64? Dlaczego wybrano tę liczbę pierwszą?