Как определить, сколько памяти потребляет класс MemoryCache?

Наш продукт основан на наборе данных объекта в памяти, который хранится в MemoryCache.

Я хотел бы знать, сколько памяти потребляют данные, хранящиеся в кеше.

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

Класс имеет такие свойства, как: CacheMemoryLimit и PhysicalMemoryLimit, но нет свойства, которое позволило бы мне узнать, сколько памяти потребляется?

Заранее спасибо!


person Denis    schedule 31.10.2013    source источник
comment
как насчет GetCount() * Marshal.SizeOf(ваш тип)   -  person HL-SDK    schedule 31.10.2013
comment
Выполняя это в своем Списке‹› объектов, я получаю сообщение об ошибке: - нельзя маршалировать как неуправляемую структуру; невозможно вычислить осмысленный размер или смещение.   -  person Denis    schedule 31.10.2013
comment
Ясно... кажется, вы можете получить размер только определенных типов.   -  person HL-SDK    schedule 31.10.2013
comment
Вы можете сделать это с помощью отладчика, поддерживающего SOS.dll.   -  person Brian Rasmussen    schedule 31.10.2013


Ответы (1)


Лучший способ проверить память — использовать WinDbg + SOS/Psscor. В частности, эта статья от Тесс даст вам скрипт для автоматизации проверки MemoryCache.

Однако, если вы не знакомы с этими инструментами и внутренними структурами .net, обычно тратится несколько часов на настройку среды и понимание того, как она работает.

Другой способ — использовать средства отладки 2.0, доступные здесь. Вам просто нужно создать дамп памяти вашего рабочего процесса (Диспетчер задач/Правая кнопка мыши/Создать файл дампа) и выбрать Анализ памяти. Отчет содержит раздел Размер веб-кеша в процессе.

Если вы хотите выполнить проверку оперативной памяти, вы можете использовать ClrMD от команды .net. . Введение доступно здесь.

person Cybermaxs    schedule 17.12.2013