Страницы

Поиск по вопросам

среда, 31 октября 2018 г.

Как узнать размер объекта?

Какие есть способы получить размер объекта в памяти? Можно не обязательно в рантайме (кодом).


Ответ

Можно использовать WinDBG с psscor4.dll для платформы .NET (ещё есть Son of Strike но для Вашей задачи достаточно psscor4 (для CLR версии 2.* нужно взять psscor2)).
Запускаем WinDbg от имени администратора желательно. Аттачимся к нашему процессу. Загружаем psscor4: .load C:\Symbols\Psscor4\x86\x86\psscor4.dll - путь тут нужно подставить свой. Ищете Ваш объект. Тут есть несколько способов, например, самый простой для простых тестов памяти это выполнить команду !DumpHeap и вы увидите например такое: Дальше выполняем команду !DumpHeap /d -mt 00414da0, где 00414da0 - адрес Вашего объекта. И видим: И последний шаг (в этом простом примере): это выполнить команду получения размера объекта по его адресу: !objsize 0df73294, где 0df73294 - адрес объекта. И видим:
Мой код для теста:
public static class Program { private static void Main() { MyObject myObject = new MyObject { S = "1234567895555555555555555555555555555555", Type = 0 };
Console.ReadKey(); // не забудьте приаттачится в нужный момент.
Console.WriteLine(myObject); } }
public class MyObject { public int Type { get; set; } public string S { get; set; } }

Комментариев нет:

Отправить комментарий