Мне интересно, есть ли простая команда или инструкция в C # /. NET и / или Visual Studio, которая может сказать мне, сколько памяти занимает отдельный объект? У меня есть скрытое подозрение, что оператор sizeof () мне врет ... оправдан ли я в этом убеждении?
Здесь есть несколько связанный вопрос , но однозначного ответа о том, как измерить отдельный объект не дано
Не существует окончательного способа, потому что он непростой для любого типа объекта.
Что, если этот объект содержит ссылки на другие объекты? Что, если у этих других объектов есть другие объекты, ссылающиеся на них? Какой объект на самом деле владеет этим пространством памяти? Это тот, кто его создал, или последний, кто прикоснулся к нему? В любой момент у него могут быть разные владельцы. Или вас просто волнует, сколько места занимает ссылка?
Есть еще куча вопросов, которые задают и этот вопрос ... Появляется быстрый поиск:
Как получить размер объекта в памяти?
C #: Использование памяти объектом
Сколько памяти использует объект C # /. NET?
и список продолжается до ...
Интересно, как работает System.Runtime.InteropServices.Marshal.SizeOf ()
? В объекте Marshal есть много интересных статических функций, которые могут быть здесь полезны.
Нет простого способа, и sizeof
подойдет только для типов значений. Типичный объект содержит ссылки на списки и другие объекты, поэтому для получения фактического количества байтов вам придется обойти все указатели, а также добавить размеры указателей.
Вы можете проверить .Net Profiling API или использовать профилировщик памяти, например dotTrace. Профилировщик памяти, по крайней мере, поможет вам увидеть, где выделяется память и является ли выделение памяти проблемой в вашем приложении. Это часто более полезно, чем фактический размер объекта.