?

Log in

No account? Create an account
Крик души: - kouzdra — LiveJournal [entries|archive|friends|userinfo]
kouzdra

[ website | www.kouzdra.org ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Крик души: [Jul. 17th, 2015|03:39 pm]
kouzdra
http://cloudbings.com/questions/1496117/nested-dictionary-size-growth
I have a simple Dictionary<long, long> object which takes up 500 MB space when i populate 10 million entries in it. But when I use nested dictionary Dictionary<long, Dictionary<long, long>>, the same 10 million entries were taking 2.5 GB space. The internal dictionary was filled with only single entry.

Can someone help in explaining how the dictionary in .net is allocated memory and how does it grow in size?
LinkReply

Comments:
From: bydl0coder
2015-07-17 01:10 pm (UTC)
Это вроде первый вопрос на всех интервью про Яву/дотнет.
(Reply) (Thread)
[User Picture]From: kouzdra
2015-07-17 01:17 pm (UTC)
Я вообще-то не про "почему", а про 500MB и 2.5GB. Быдлокодеры такие быдлокодеры.
(Reply) (Parent) (Thread) (Expand)
From: asox
2015-07-17 04:02 pm (UTC)
I have a simple Dictionary<long, long> object which takes up 500 MB space when i populate 10 million entries in it.

Писят байт на один entry (long,long)?
Ничётак се, нехило.
Даже если long - 8-байтный и все указатели тоже 64-битные...
"Хорошо живёт на свете Винни-Пух!""

Edited at 2015-07-17 04:03 pm (UTC)
(Reply) (Thread)
From: bydl0coder
2015-07-17 04:22 pm (UTC)
А в чистых сях 25 и чо?
(Reply) (Parent) (Thread)
From: asox
2015-07-17 04:25 pm (UTC)
Ничо - в два раза меньше сразу.
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
(Deleted comment)
[User Picture]From: moonwalker72
2015-07-17 06:40 pm (UTC)
Словарик по умолчанию инстанцируется с capacity, которая видимо те 250 байт и занимает. Скольким элементам это соответствует - затрудняюсь сказать. И конечно там же есть какие-то внутренние поля словарика, помимо этой capacity. Дурень он. Не в смысле арифметики конечно. А насчет того, чтобы такими объемами ворочать в управляемом коде.
(Reply) (Thread)
From: bydl0coder
2015-07-17 07:51 pm (UTC)
Расскажите авторам Кассандры какой-нибудь.
(Reply) (Parent) (Thread) (Expand)
From: bydl0coder
2015-07-17 07:51 pm (UTC)
Удачный тред. Двое уже говна поели, третий, похоже, на подходе.
(Reply) (Thread)
[User Picture]From: kouzdra
2015-07-17 07:56 pm (UTC)
Вы не учитываете один момент - что я на этот текст набрел именно прибирая говно за одним из адептов вашего подхода. Прежде чем принимать радикальные меры - я именно что нашел текст Dictionary и руками выхерил из него все лишнее говно - что очень благотворно сказалось на поведении софтины.

Хотя и недостаточно хорошо.

В процессе уточнений попался этот крик души.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: trilirium
2015-07-18 03:01 am (UTC)
Я не понял.
Он заводит хэш для хранения ОДНОГО значения?
И так -- десять миллионов раз??? )))
(Reply) (Thread)
[User Picture]From: slavva
2015-07-18 01:42 pm (UTC)
не думаю, что ему это в практическом смысле как-то нужно. просто человек удивляется, почему хэш из 10 млн значений занимает сильно меньше, чем хэш из 10 млн. хэшей с одним элементом.
(Reply) (Parent) (Thread)
[User Picture]From: trilirium
2015-07-18 04:31 pm (UTC)
"О, сколько нам открытий чудных..."

Наверное, человека удивит и то, что десять миллионов книг занимают куда меньше места, чем десять миллионов книжных шкафов, в каждом из которых ровно по одной книге? )))
(Reply) (Parent) (Thread)
[User Picture]From: oboguev
2015-07-18 06:41 am (UTC)
Да ладно, чего там.

Меня вот весной коллеги из соседнего департамента призвали как условно-независимого аудитора сделать аудит кода третьего (заокеанского) департамента, с которым они бодались на тему "медленно".

Пристальный взгляд выявил, что медленно было в основом из-за memory allocation, причём там разные были забавные моменты.

Например, припоминаю, был цикл, который инициализировал на стеке класс со встроенными членами внутренне использующими malloc. После чего созданный объект добавлялся в массив посредством copy-конструктора. После чего созданные таким образом массивы добавлялись в корневой массив, тоже посредством copy-конструктора.

И ещё куча таких же вещей.
И это писали не интерны, а люди с многолетним послужным списком.

Это же системная проблема на самом деле: как только люди начинают использовать высокоуровневые элементы (STL, в описанном случае), они регулярно теряют из вида что происходит под юбкой.
(Reply) (Thread)
[User Picture]From: ext_1684112
2015-07-18 07:00 am (UTC)
По-хорошему, такие вещи должен оптимизировать компилятор. А чтобы компилятор это понимал, такие вещи должны делаться на уровне языка, а не библиотеки.

Все, приехали.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: os80
2015-07-18 07:12 am (UTC)
Ваш любимый «Вова Патрышев» сегодня запостил портрет этого человека с кричащей душой :-)
(Reply) (Thread)