Какие есть способы получить размер объекта в памяти? Можно не обязательно в рантайме (кодом).
Ответ
Можно использовать 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; }
}
Комментариев нет:
Отправить комментарий