Информация об изменениях

Сообщение Re[23]: Зачем нам асинхронность? от 24.08.2020 21:53

Изменено 24.08.2020 22:38 Sharowarsheg

Re[23]: Зачем нам асинхронность?
Здравствуйте, 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)
Re[23]: Зачем нам асинхронность?
Здравствуйте, 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)

что довольно удивительно.