Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Sharowarsheg, Вы писали:
S>>Здравствуйте, Serginio1, Вы писали:
S>>>На саамом деле ты много не выигрываешь от первичного задания размера, можешь и проиграть. Ну в данном случае если размер известен раздели его на 16.
S>>>Ну а в дотнете ограничение в int.MaxValue
S>>Нет, по крайней мере в ранних версиях (2.0) ограничение что-то между 25 и 30 миллионов.
S>https://stackoverflow.com/questions/3460729/is-there-a-limit-to-entries-in-a-dictionary
S> Может проблема была в 32 разрядной оси? Да и 3.5 была проблема с дефрагментацией LOH
Там что-то про то, что размер массива должен быть простым числом, а запас простых чисел кончается.
На 64 разрядах предел побольше, но тоже ничего и близко к int.MaxValue нет.
using System;
using System.Collections.Generic;
namespace DictionaryTest
{
class Program
{
static void Main(string[] args)
{
Dictionary<int, int> X = new Dictionary<int, int>();
int i = 0;
while (true)
{
if ((i % 1_000) == 0) Console.WriteLine("i={0}", i);
X.Add(i, i);
i++;
}
}
}
}
.NET 4.5 x64 i = 95_991_000 (array dimensions exceed supported range)
.NET 4.5 x86 i = 23_997_000 (out of memory)
хотя, кстати, если поменять <int, int> на <long, long>, то получается
.NET 4.5 x64 i = 47_995_000 (array dimensions exceed supported range)
.NET 4.5 x86 i = 23_997_000 (out of memory)
что довольно удивительно.