Как измерить объем памяти, занимаемый отдельным объектом в .NET

Мне интересно, есть ли простая команда или инструкция в C # /. NET и / или Visual Studio, которая может сказать мне, сколько памяти занимает отдельный объект? У меня есть скрытое подозрение, что оператор sizeof () мне врет ... оправдан ли я в этом убеждении?

Здесь есть несколько связанный вопрос , но однозначного ответа о том, как измерить отдельный объект не дано

9
задан Community 23 May 2017 в 10:34
поделиться

3 ответа

Не существует окончательного способа, потому что он непростой для любого типа объекта.

Что, если этот объект содержит ссылки на другие объекты? Что, если у этих других объектов есть другие объекты, ссылающиеся на них? Какой объект на самом деле владеет этим пространством памяти? Это тот, кто его создал, или последний, кто прикоснулся к нему? В любой момент у него могут быть разные владельцы. Или вас просто волнует, сколько места занимает ссылка?

Есть еще куча вопросов, которые задают и этот вопрос ... Появляется быстрый поиск:

Как получить размер объекта в памяти?

C #: Использование памяти объектом

Узнайте размер объекта .net

Сколько памяти использует объект C # /. NET?

и список продолжается до ...

8
ответ дан 4 December 2019 в 13:44
поделиться

Интересно, как работает System.Runtime.InteropServices.Marshal.SizeOf () ? В объекте Marshal есть много интересных статических функций, которые могут быть здесь полезны.

1
ответ дан 4 December 2019 в 13:44
поделиться

Нет простого способа, и sizeof подойдет только для типов значений. Типичный объект содержит ссылки на списки и другие объекты, поэтому для получения фактического количества байтов вам придется обойти все указатели, а также добавить размеры указателей.

Вы можете проверить .Net Profiling API или использовать профилировщик памяти, например dotTrace. Профилировщик памяти, по крайней мере, поможет вам увидеть, где выделяется память и является ли выделение памяти проблемой в вашем приложении. Это часто более полезно, чем фактический размер объекта.

3
ответ дан 4 December 2019 в 13:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: