2013-12-06 5 views
0

У меня есть программа C#, который имеет словарь, я определил это так:использование памяти словаря в C#

Dictionary dict<Int32,Int32> = new Dictionary<Int32,Int32>();

Затем я добавил 100 запись в моем словаре. Теперь я хочу знать точное использование памяти этого словаря. , пожалуйста, не говорите о sizeof и некоторых подобных методах, я хочу математический способ вычислить его, например, если есть какой-либо указатель или любой хэш-ключ, который должен быть сохранен, сообщите мне (на самом деле я не знаю точное способ, которым работает словарь).

+0

В принципе, нет возможности рассчитать точный размер. В этой ссылке есть несколько хороших предложений для оценки распределения памяти: http://social.msdn.microsoft.com/Forums/vstudio/en-US/b871dee4-6eb5-4dca-be79-b9589a79f5e9/calculate-size-of- a-object-in-net? forum = clr – paulsm4

+1

Это недетерминированный. Словарь создает список для хранения всех ключей, имеющих один и тот же хэш-код. У вас может быть один список для каждого хэш-кода или нет, в зависимости от того, сколько ключевых столкновений у вас есть. – Kevin

+0

Вы знаете размеры примитивных типов, и вы знаете размер ссылки в своей среде. Вы можете рассчитать его, но это утомительная работа (и не учитывает заполнение). Почему вы хотите сделать это точно? –

ответ

1

Это внутренняя деталь реализации этого типа; он не выводит достаточно информации извне для вас, чтобы вычислить размер всех ее членов (предполагая, что вас интересует не размер экземпляра, но также и размер объектов, которыми он владеет).

Вы могли бы теоретически использовать отражение (или даже небезопасные указатели) для доступа к частным переменным экземпляра, чтобы попытаться найти размер внутреннего буфера, а также другое состояние, на котором оно держится, но это будет должны быть очень жестко привязаны к конкретной реализации словаря. Он не сможет поддерживать новые реализации класса с новыми версиями фреймворка и должен быть написан для обработки любых изменений, которые были сделаны во всех существующих версиях.

+0

+1: Обратите внимание, что OP явно не хочет использовать только встроенный способ вычисления размера, рекурсивным ходом по дереву объектов и вычислительным размерам, который не содержит в основном никаких параметров ... –

Смежные вопросы